javascript ऑब्जेक्ट को लॉनाश के साथ सरणी में बदलें




arrays object (6)

मैं लॉसैश के साथ एक बड़ी object को array कैसे बदल सकता हूं?

उदाहरण:

var obj = {
    22: {name:"John", id:22, friends:[5,31,55], works:{books:[], films:[],}
    12: {name:"Ivan", id:12, friends:[2,44,12], works:{books:[], films:[],}
}

// transform to 
var arr = [{name:"John", id:22...},{name:"Ivan", id:12...}]

धन्यवाद!

https://code.i-harness.com


2017 अपडेट: Object.values , लॉनाश values और टूएरे इसे करते हैं। और कुंजी को संरक्षित करने के लिए map और प्रसार ऑपरेटर अच्छा खेलते हैं:

// import { toArray, map } from 'lodash'
const map = _.map

const input = {
  key: {
    value: 'value'
  }
}

const output = map(input, (value, key) => ({
  key,
  ...value
}))

console.log(output)
// >> [{key: 'key', value: 'value'}])
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>


तुम कर सकते हो

var arr = _.values(obj);

दस्तावेज़ीकरण के लिए here. देखें here.


यदि आप किसी ऐरे में ऑब्जेक्ट के कुछ कस्टम मैपिंग (जैसे मूल Array.prototype.map) चाहते हैं, तो आप बस _.forEach उपयोग कर सकते हैं:

let myObject = {
  key1: "value1",
  key2: "value2",
  // ...
};

let myNewArray = [];

_.forEach(myObject, (value, key) => {
  myNewArray.push({
    someNewKey: key,
    someNewValue: value.toUpperCase() // just an example of new value based on original value
  });
});

// myNewArray => [{ someNewKey: key1, someNewValue: 'VALUE1' }, ... ];

_.forEach https://lodash.com/docs/#forEach का lodash doc देखें


यदि आप कुंजी (इस मामले में आईडी) को प्रत्येक सरणी आइटम की संपत्ति के रूप में संरक्षित करना चाहते हैं तो आप कर सकते हैं

const arr = _(obj) //wrap object so that you can chain lodash methods
            .mapValues((value, id)=>_.merge({}, value, {id})) //attach id to object
            .values() //get the values of the result
            .value() //unwrap array of objects

सभी मौजूदा उत्तरों के अलावा (जो वास्तव में अच्छे और सही हैं), बस यहां एक और दृष्टिकोण जोड़ना:

आप object साथ _.map फ़ंक्शन ( lodash और underscore दोनों) का भी उपयोग कर सकते हैं, यह आंतरिक रूप से उस मामले को संभालेगा, प्रत्येक मान और कुंजी को आपके इटेटेट के साथ फिर से चालू करेगा, और अंत में एक सरणी लौटाएगा। असल में, यदि आप केवल मूल्यों की सरणी चाहते हैं तो आप इसे किसी भी iteratee (बस _.map(obj) ) के बिना उपयोग कर सकते हैं। अच्छा हिस्सा यह है कि, यदि आपको बीच में किसी भी बदलाव की आवश्यकता है, तो आप इसे एक ही समय में कर सकते हैं।

उदाहरण:

var obj = {
    key1: {id: 1, name: 'A'},
    key2: {id: 2, name: 'B'},
    key3: {id: 3, name: 'C'}
};

var array1 = _.map(obj, v=>v);
console.log('Array 1: ', array1);

/*Actually you don't need the callback v=>v if you
are not transforming anything in between, v=>v is default*/

//SO simply you can use
var array2 = _.map(obj);
console.log('Array 2: ', array2);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

हालांकि, अगर आप अपनी ऑब्जेक्ट को बदलना चाहते हैं तो आप ऐसा कर सकते हैं, भले ही आपको कुंजी को संरक्षित करने की आवश्यकता हो, फिर भी आप ऐसा कर सकते हैं ( _.map(obj, (v, k) => {...} ) अतिरिक्त तर्क के साथ map और फिर इसका उपयोग करें कि आप कैसे चाहते हैं।


_.toArray(obj);

आउटपुट के रूप में:

[
  {
    "name": "Ivan",
    "id": 12,
    "friends": [
      2,
      44,
      12
    ],
    "works": {
      "books": [],
      "films": []
    }
  },
  {
    "name": "John",
    "id": 22,
    "friends": [
      5,
      31,
      55
    ],
    "works": {
      "books": [],
      "films": []
    }
  }
]"




lodash