Ich habe eine Reihe von Objekten:
[
{ key : '11', value : '1100', $$hashKey : '00X' },
{ key : '22', value : '2200', $$hashKey : '018' }
];
Wie konvertiere ich es per JavaScript in das Folgende?
{
"11": "1000",
"22": "2200"
}
Ich habe eine Reihe von Objekten:
[
{ key : '11', value : '1100', $$hashKey : '00X' },
{ key : '22', value : '2200', $$hashKey : '018' }
];
Wie konvertiere ich es per JavaScript in das Folgende?
{
"11": "1000",
"22": "2200"
}
Antworten:
Sie suchen wahrscheinlich nach so etwas:
// 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);
Eine winzige ES6-Lösung kann folgendermaßen aussehen:
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)
Wenn Sie die Objektverteilung verwenden, kann dies folgendermaßen aussehen:
var object = arr.reduce((obj, item) => ({...obj, [item.key]: item.value}) ,{});
Eine weitere Lösung, die 99% schneller ist, ist (auf jsperf getestet):
var object = arr.reduce((obj, item) => (obj[item.key] = item.value, obj) ,{});
Hier profitieren wir vom Komma-Operator, der alle Ausdrücke vor dem Komma auswertet und einen letzten (nach dem letzten Komma) zurückgibt. Wir kopieren also nicht objjedes Mal, sondern weisen ihm eine neue Eigenschaft zu.
var object = arr.reduce((obj, item) => (obj[item.key] = item.value, obj) ,{});
({...obj, ...{[item.key]: item.value}}) ,{});
Ich mag den funktionalen Ansatz, um diese Aufgabe zu erreichen:
var arr = [{ key:"11", value:"1100" }, { key:"22", value:"2200" }];
var result = arr.reduce(function(obj,item){
obj[item.key] = item.value;
return obj;
}, {});
Hinweis: Last {}ist der Anfangswert objfür die Reduzierungsfunktion. Wenn Sie den Anfangswert nicht angeben, wird das erste arrElement verwendet (was wahrscheinlich unerwünscht ist).
Der Versuch, diese Antwort in Wie konvertiere ich ein Array von Objekten in ein Objekt in JavaScript? ,
das sollte es tun:
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 }) )));
Verwenden von 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);
Ein sauberer Weg, dies mit modernem JavaScript zu tun, ist wie folgt:
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" }
Verwenden Sie lodash !
const obj = _.keyBy(arrayOfObjects, 'keyName')
Basierend auf den Antworten vieler Autoren habe ich ein JsPref-Testszenario erstellt. https://jsperf.com/array2object82364
Unten finden Sie die Screenshots der Leistung. Es ist ein wenig schockierend für mich zu sehen, dass das Chromergebnis im Gegensatz zu Firefox und Edge steht, auch wenn es mehrmals ausgeführt wurde.
Verwenden von Underscore.js :
var myArray = [
Object { key="11", value="1100", $$hashKey="00X"},
Object { key="22", value="2200", $$hashKey="018"}
];
var myObj = _.object(_.pluck(myArray, 'key'), _.pluck(myArray, 'value'));
Update: Die Welt drehte sich weiter. Verwenden Sie stattdessen einen funktionalen Ansatz.
Bitte schön:
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"}
arrayist ein reserviertes Schlüsselwort, das arrstattdessen verwendet wird. usw.
So akzeptieren Sie das oben Gesagte dynamisch als Zeichenfolge und interpolieren es in ein Objekt:
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)
Sie können dafür die mapKeys lodash-Funktion verwenden. Nur eine Codezeile!
Bitte beziehen Sie sich auf dieses vollständige Codebeispiel (Kopieren, Einfügen in repl.it oder ähnliches):
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;}, {})