JavaScript — конвертировать массив в объект

Преобразовать массив в объект

Вы можете использовать аккумулятор ака 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" 

Передайте пустой объект {} в качестве отправной точки; затем «увеличивать» этот объект постепенно. В конце итераций result будет {"0": "a", "1": "b", "2": "c"}

Если ваш массив представляет собой набор объектов пары ключ-значение:

 [{ 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; }, {}); 

произведет: {a: 1, b: 2, c: 3}

Для полноты reduceRight позволяет перебирать массив в обратном порядке:

 [{ a: 1},{ b: 2},{ c: 3}].reduceRight(/* same implementation as above */) 

произведет: {c:3, b:2, a:1}

Ваш аккумулятор может быть любого типа для конкретной цели. Например, чтобы поменять ключ и значение вашего объекта в массиве, передайте [] :

 [{ 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 

будет производить: [{1: "a"}, {2: "b"}, {3: "c"}]

В отличие от map , reduce не может использоваться как отображение 1-1. У вас есть полный контроль над элементами, которые вы хотите включить или исключить. Следовательно, reduce позволяет вам достичь того, что делает filter , что делает reduce очень универсальным:

 [{ 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 

будет производить: [{2: "b"}, {3: "c"}]

Внимание : Object.key и Object.key являются частью ECMA 5th edition ; Вы должны предоставить polyfill для браузеров, которые их не поддерживают (особенно IE8).

Смотрите реализацию по умолчанию от Mozilla .

§

Простейший способ сделать это заключается в следующем:

 const arr = ['a','b','c']; let obj = {} function ConvertArr(arr) { if (typeof(arr) === 'array') { Object.assign(obj, arr); } 

Таким образом, он запускается только в том случае, если он является массивом, однако вы можете запустить его с помощью глобальной переменной объекта let или без нее, это зависит от вас, если вы запускаете без let, просто выполните Object.assign ({}, arr).

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector