2016-05-02 5 views
0

Я хочу, чтобы преобразовать:Самый эффективный способ преобразования массива объектов JS в вложенную форму?

[ 
    {id: 1, name: 'one', desc: 'one'}, 
    {id: 2, name: 'two', desc: 'two'}, 
    {id: 3, name: 'three', desc: 'three'} 
] 

в

{ 
    1: {id: 1, name: 'one', desc: 'one'}, 
    2: {id: 2, name: 'two', desc: 'two'}, 
    3: {id: 3, name: 'three', desc: 'three'} 
} 

Что является наиболее эффективным/производительный способ сделать это? Некоторые варианты были бы:

1) https://github.com/gaearon/normalizr

2) d3.nest()

3) const object = {}; array.forEach(item => { object[item.id] = item });

+0

У вас уже есть объект в этой конфигурации, только он начинается с 0 вместо 1. ;-) – RobG

ответ

0

Я бы сказал, что это:

const obj = Object.assign({}, array); 

Хотя, у меня нет сравнили его производительность с вашими вариантами.

+1

Это не сработает, OP хочет назначить их своим .id' не их индексом в массиве. – Bergi

1

Мне нравится Array.prototype.reduce() решения. Проверьте это

var arr = [{id: 1, name: 'one', desc: 'one'}, {id: 2, name: 'two', desc: 'two'}, {id: 3, name: 'three', desc: 'three'}], 
 
    obj = arr.reduce((p,c) => {p[c.id] = c; return p},{}); 
 

 
document.write("<pre>" + JSON.stringify(obj,null,2) + "</pre>");

0

попробовать это:

ar = [ 
 
    {id: 1, name: 'one', desc: 'one'}, 
 
    {id: 2, name: 'two', desc: 'two'}, 
 
    {id: 3, name: 'three', desc: 'three'} 
 
] 
 

 
var result = ar.reduce((ac, x) => {return ac[x.id] = x , ac ;}, {}) 
 

 
document.write(JSON.stringify(result))

, но помните, что ключи являются строками, и вы имеете дело с объектом не массив. ..

1

Вы можете также использовать простой цикл:

var arr = [{id: 1, name: 'one', desc: 'one'}, {id: 2, name: 'two', desc: 'two'}, {id: 3, name: 'three', desc: 'three'}], 
    obj = {} 
for(var item of arr) obj[item.id] = item; 

Обычно петли быстрее, чем методы массива ES5, потому что они не должны вызывать функцию на каждой итерации.

+0

классный способ сделать, но не связать ... еще + – Redu

Смежные вопросы