मेरे पास वस्तुओं की एक सरणी है:
[
{ key : '11', value : '1100', $$hashKey : '00X' },
{ key : '22', value : '2200', $$hashKey : '018' }
];
मैं इसे जावास्क्रिप्ट द्वारा निम्नलिखित में कैसे बदलूं?
{
"11": "1000",
"22": "2200"
}
मेरे पास वस्तुओं की एक सरणी है:
[
{ key : '11', value : '1100', $$hashKey : '00X' },
{ key : '22', value : '2200', $$hashKey : '018' }
];
मैं इसे जावास्क्रिप्ट द्वारा निम्नलिखित में कैसे बदलूं?
{
"11": "1000",
"22": "2200"
}
जवाबों:
आप शायद कुछ इस तरह की तलाश कर रहे हैं:
// original
var arr = [
{key : '11', value : '1100', $$hashKey : '00X' },
{key : '22', value : '2200', $$hashKey : '018' }
];
//convert
var result = {};
for (var i = 0; i < arr.length; i++) {
result[arr[i].key] = arr[i].value;
}
console.log(result);
छोटे ES6 समाधान की तरह देख सकते हैं:
var arr = [{key:"11", value:"1100"},{key:"22", value:"2200"}];
var object = arr.reduce(
(obj, item) => Object.assign(obj, { [item.key]: item.value }), {});
console.log(object)
इसके अलावा, यदि आप ऑब्जेक्ट स्प्रेड का उपयोग करते हैं, तो यह इस तरह दिख सकता है:
var object = arr.reduce((obj, item) => ({...obj, [item.key]: item.value}) ,{});
एक और उपाय जो 99% तेज है (jsperf पर परीक्षण किया गया है):
var object = arr.reduce((obj, item) => (obj[item.key] = item.value, obj) ,{});
यहां हम अल्पविराम ऑपरेटर से लाभान्वित होते हैं, यह अल्पविराम से पहले सभी अभिव्यक्ति का मूल्यांकन करता है और अंतिम एक (अंतिम अल्पविराम के बाद) देता है। इसलिए हम objहर बार इसकी नकल नहीं करते , बल्कि इसे नई संपत्ति सौंपते हैं।
var object = arr.reduce((obj, item) => (obj[item.key] = item.value, obj) ,{});
({...obj, ...{[item.key]: item.value}}) ,{});
मुझे इस कार्य को प्राप्त करने के लिए कार्यात्मक दृष्टिकोण पसंद है:
var arr = [{ key:"11", value:"1100" }, { key:"22", value:"2200" }];
var result = arr.reduce(function(obj,item){
obj[item.key] = item.value;
return obj;
}, {});
नोट: अंतिम कार्य को कम करने के लिए {}प्रारंभिक objमूल्य है, यदि आप प्रारंभिक मूल्य प्रदान नहीं करेंगे, तो पहले arrतत्व का उपयोग किया जाएगा (जो संभवतः अवांछनीय है)।
ठीक करने के लिए कोशिश कर रहा है इस जवाब में मैं कैसे जावास्क्रिप्ट में एक वस्तु में वस्तुओं की सरणी में परिवर्तित? ,
यह करना चाहिए:
var array = [
{key:'k1',value:'v1'},
{key:'k2',value:'v2'},
{key:'k3',value:'v3'}
];
var mapped = array .map(item => ({ [item.key]: item.value }) );
var newObj = Object.assign({}, ...mapped );
console.log(newObj );
var newObj = Object.assign({}, ...(array.map(item => ({ [item.key]: item.value }) )));
Object.fromEntries का उपयोग करना :
const array = [
{ key: "key1", value: "value1" },
{ key: "key2", value: "value2" },
];
const obj = Object.fromEntries(array.map(item => [item.key, item.value]));
console.log(obj);
आधुनिक जावास्क्रिप्ट का उपयोग करने का एक साफ तरीका इस प्रकार है:
const array = [
{ name: "something", value: "something" },
{ name: "somethingElse", value: "something else" },
];
const newObject = Object.assign({}, ...array.map(item => ({ [item.name]: item.value })));
// >> { something: "something", somethingElse: "something else" }
उपयोग lodash !
const obj = _.keyBy(arrayOfObjects, 'keyName')
कई लेखकों द्वारा सुझाए गए उत्तरों के आधार पर, मैंने एक JsPref परीक्षण परिदृश्य बनाया। https://jsperf.com/array2object82364
नीचे प्रदर्शन के स्क्रीनशॉट हैं। यह मेरे लिए थोड़ा चौंकाने वाला है, क्रोम परिणाम फ़ायरफ़ॉक्स और किनारे के विपरीत है, यहां तक कि इसे कई बार चलाने के बाद भी।
अपडेट: दुनिया मुड़ती रही। इसके बजाय एक कार्यात्मक दृष्टिकोण का उपयोग करें।
हेयर यू गो:
var arr = [{ key: "11", value: "1100" }, { key: "22", value: "2200" }];
var result = {};
for (var i=0, len=arr.length; i < len; i++) {
result[arr[i].key] = arr[i].value;
}
console.log(result); // {11: "1000", 22: "2200"}
arrayएक आरक्षित कीवर्ड है, इसलिए लोग arrइसके बजाय उपयोग करते हैं। आदि
यहां बताया गया है कि कैसे गतिशील रूप से उपरोक्त को एक स्ट्रिंग के रूप में स्वीकार करते हैं और इसे एक वस्तु में बदलते हैं:
var stringObject = '[Object { key="11", value="1100", $$hashKey="00X"}, Object { key="22", value="2200", $$hashKey="018"}]';
function interpolateStringObject(stringObject) {
var jsObj = {};
var processedObj = stringObject.split("[Object { ");
processedObj = processedObj[1].split("},");
$.each(processedObj, function (i, v) {
jsObj[v.split("key=")[1].split(",")[0]] = v.split("value=")[1].split(",")[0].replace(/\"/g,'');
});
return jsObj
}
var t = interpolateStringObject(stringObject); //t is the object you want
// original
var arr = [{
key: '11',
value: '1100',
$$hashKey: '00X'
},
{
key: '22',
value: '2200',
$$hashKey: '018'
}
];
// My solution
var obj = {};
for (let i = 0; i < arr.length; i++) {
obj[arr[i].key] = arr[i].value;
}
console.log(obj)
आप उसके लिए mapKeys lodash फ़ंक्शन का उपयोग कर सकते हैं। कोड की सिर्फ एक लाइन!
कृपया इस पूर्ण कोड नमूने का संदर्भ लें (कॉपी पेस्ट को repl.it या समान में कॉपी करें):
import _ from 'lodash';
// or commonjs:
// const _ = require('lodash');
let a = [{ id: 23, title: 'meat' }, { id: 45, title: 'fish' }, { id: 71, title: 'fruit' }]
let b = _.mapKeys(a, 'id');
console.log(b);
// b:
// { '23': { id: 23, title: 'meat' },
// '45': { id: 45, title: 'fish' },
// '71': { id: 71, title: 'fruit' } }
var obj = [
{id: 1 , name : 'gaju' , class : 'kv'},
{id: 2 , name : 'tushar' , class : 'Super'}
];
function conv(obj,arg){
var temp= {};
var output= {}
for(key in obj){
temp[key] = obj[key];
};
var i=0;
for(key in temp){
var aa = {};
var value = temp[key][arg];
aa[value] = temp[i];
//console.log(aa[value][arg] );
output[aa[value][arg]]= aa[value];
i++;
}
console.log(output);
}
calling function
conv(obj,'class');
[{key:"11", value:"1100"}, {key:"22", value:"2200"}].reduce(function(m,v){m[v.key] = v.value; return m;}, {})