2016-05-10 3 views
1

Один из возможных выходов для моего обслуживания заключается в следующем.Как преобразовать массив в карту?

[{ 
    "key": 1, 
    "val": 0 
}, { 
    "key": 2, 
    "val": 0 
}] 

Есть функция, которая может преобразовывать это в объект, подобный приведенному ниже?

{ 
    "1":0, 
    "2":0 
} 

Моя цель состоит в том, чтобы иметь возможность считывать значения объекта в виде карты, такие как o["1"], т.е .: if (o["1"] == 0) {....

+0

Пожалуйста, используйте поиск, прежде чем задавать новый вопрос. –

+0

Спасибо за уведомление. Вероятно, я не использовал правильные ключевые слова для поиска. – Nick

ответ

2

Вы можете выполнить итерацию с помощью Array#forEach и присвоить требуемые свойства со значением.

var array = [{ "key": 1, "val": 0 }, { "key": 2, "val": 0 }], 
 
    object = {}; 
 

 
array.forEach(function (a) { 
 
    object[a.key] = a.val; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');

3

Вы можете сделать это с reduce

var data = [{"key": 1, "val": 0}, {"key": 2, "val": 0}]; 
 

 
var result = data.reduce((obj, e) => { 
 
    obj[e.key]= e.val; 
 
    return obj; 
 
}, {}); 
 

 
console.log(result)

1

Вы можете сделать это в JavaScript с

target = {}; 
source.forEach(function(e) { 
    target[e.key] = e.val; 
}); 
1

Я не думаю, что есть один в чистом Javascript. Возможно, какая-то библиотека, например jQuery, будет иметь что-то подобное. Тем не менее, вы можете сделать свой собственный с небольшим кодом. В чистом JS:

var o = {}; 

for (var i = 0; i < json.length; i++) { 
    o[json[i].key] = json[i].val; 
} 
Смежные вопросы