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



arrays object lodash (8)

मैं लॉसैश के साथ एक बड़ी 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...}]

धन्यवाद!


Answers

यदि कोई दिलचस्पी है तो आधुनिक आधुनिक समाधान (कुशिक में सुधार के लिए धन्यवाद):

const arr = Object.keys(obj).map(key => ({ key, value: obj[key] }));

मेरे लिए, यह काम किया:

_.map(_.toPairs(data), d => _.fromPairs([d]));

यह बदलता है

{"a":"b", "c":"d", "e":"f"} 

में

[{"a":"b"}, {"c":"d"}, {"e":"f"}]

_.toArray(obj);

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

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

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>


यदि आप किसी ऐरे में ऑब्जेक्ट के कुछ कस्टम मैपिंग (जैसे मूल 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 देखें


तुम कर सकते हो

var arr = _.values(obj);

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


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

आप 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 और फिर इसका उपयोग करें कि आप कैसे चाहते हैं।


objs.sort(function(a,b){return b.last_nom>a.last_nom})




javascript arrays object lodash