Wie kann ich am besten konvertieren?
['a','b','c']
zu:
{
0: 'a',
1: 'b',
2: 'c'
}
Wie kann ich am besten konvertieren?
['a','b','c']
zu:
{
0: 'a',
1: 'b',
2: 'c'
}
ECMAScript 6 führt die leicht füllbare Object.assign
:
En
Object.assign()
Methode wird verwendet, um die Werte aller aufzählbaren eigenen Eigenschaften von einem oder mehreren Quellobjekten in ein Objekt zu kopieren. Sie gibt das Zielobjekt zurück.
Object.assign({}, ['a','b','c']); // {0:"a", 1:"b", 2:"c"}
Die eigene length
Eigenschaft des Arrays wird nicht kopiert, da sie nicht aufzählbar ist.
Sie können auch ES8 verwenden Verbreitungssyntax auf Objekte, um das gleiche Ergebnis zu erzielen:
{ ...['a', 'b', 'c'] }
Für benutzerdefinierte Schlüssel können Sie verwenden reduzieren. :
['a', 'b', 'c'].reduce((a, v) => ({ ...a, [v]: v}), {})
// { a: "a", b: "b", c: "c" }
Mit einer Funktion wie dieser:
function toObject(arr) {
var rv = {};
for (var i = 0; i < arr.length; ++i)
rv[i] = arr[i];
return rv;
}
Ihr Array ist bereits mehr oder weniger nur ein Objekt, aber Arrays haben einige "interessante" und spezielle Verhalten in Bezug auf Integer-benannte Eigenschaften. Das obige Beispiel gibt Ihnen ein einfaches Objekt.
bearbeiten Sie sollten auch die "Löcher" in der Anordnung berücksichtigen:
function toObject(arr) {
var rv = {};
for (var i = 0; i < arr.length; ++i)
if (arr[i] !== undefined) rv[i] = arr[i];
return rv;
}
In modernen JavaScript-Laufzeiten können Sie die .reduce()
Methode:
var obj = arr.reduce(function(acc, cur, i) {
acc[i] = cur;
return acc;
}, {});
Auf diese Weise werden auch "Löcher" im Array vermieden, denn das ist die .reduce()
funktioniert.
Sie könnten einen Akkumulator verwenden, auch bekannt als reduce
.
['a','b','c'].reduce(function(result, item, index, array) {
result[index] = item; //a, b, c
return result;
}, {}) //watch out the empty {}, which is passed as "result"
Übergeben Sie ein leeres Objekt {}
als Ausgangspunkt; dann wird dieses Objekt schrittweise "erweitert". Am Ende der Iterationen, result
wird sein {"0": "a", "1": "b", "2": "c"}
Wenn Ihr Array ein Satz von Schlüssel-Wert-Paar-Objekten ist:
[{ a: 1},{ b: 2},{ c: 3}].reduce(function(result, item) {
var key = Object.keys(item)[0]; //first property: a, b, c
result[key] = item[key];
return result;
}, {});
hervorbringen wird: {a: 1, b: 2, c: 3}
Der Vollständigkeit halber, reduceRight
ermöglicht es Ihnen, Ihr Array in umgekehrter Reihenfolge zu durchlaufen:
[{ a: 1},{ b: 2},{ c: 3}].reduceRight(/* same implementation as above */)
hervorbringen wird: {c:3, b:2, a:1}
Ihr Akkumulator kann ein beliebiger Typ für Ihren speziellen Zweck sein. Um zum Beispiel den Schlüssel und den Wert eines Objekts in einem Array zu vertauschen, übergeben Sie []
:
[{ a: 1},{ b: 2},{ c: 3}].reduce(function(result, item, index) {
var key = Object.keys(item)[0]; //first property: a, b, c
var value = item[key];
var obj = {};
obj[value] = key;
result.push(obj);
return result;
}, []); //an empty array
hervorbringen wird: [{1: "a"}, {2: "b"}, {3: "c"}]
Anders als map
, reduce
darf nicht als 1-1-Zuordnung verwendet werden. Sie haben die volle Kontrolle über die Elemente, die Sie ein- oder ausschließen möchten. Deshalb reduce
ermöglicht es Ihnen, das zu erreichen, was filter
macht, was die reduce
sehr vielseitig:
[{ a: 1},{ b: 2},{ c: 3}].reduce(function(result, item, index) {
if(index !== 0) { //skip the first item
result.push(item);
}
return result;
}, []); //an empty array
hervorbringen wird: [{2: "b"}, {3: "c"}]
Vorsicht : reduce
y Object.key
sind Teil von ECMA 5th edition
Sie sollten ein Polyfill für Browser bereitstellen, die sie nicht unterstützen (vor allem IE8).
Siehe eine Standardimplementierung von Mozilla .
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
17 Stimmen
Es ist erwähnenswert, dass Javascript-Arrays sind Objekte.
2 Stimmen
Falls noch jemand nach einer Lodash-Lösung sucht, sollten Sie Folgendes in Betracht ziehen
_.keyBy
(ehemals_.indexBy
): lodash.com/docs#keyBy1 Stimmen
Dies ist ein bisschen verwirrend, weil Arrays bereits Objekte sind, aber ich denke, der Punkt der Frage ist die Umwandlung der Array exotisches Objekt zu einer gewöhnliches Objekt .
3 Stimmen
Eine einfache Möglichkeit, dies mit Lodash zu tun, ist
_.toPlainObject
. Ex:var myObj = _.toPlainObject(myArr)