[英]Reducing array of objects to hashmap in JS
嗨,我正在嘗試將JSON數據類型從一種格式轉換為另一種格式:
[ { name: 'CarNo', attributes: {}, children: [], content: '?' },
{ name: 'AccNo', attributes: {}, children: [], content: '?' },
{ name: 'SCS', attributes: {}, children: [], content: '?' }]
目標對象將基於name屬性和content屬性:
{'CarNo': '?', 'AccNo': '?', 'SCS': '?' }
我當時以為我可以減少這種情況,但我失敗了:
const filteredResponseObj = Object.keys(rawResponseBodyObj).reduce((p,c)=>{
if( c === 'name' ){
p[c]=rawResponseBodyObj[c].content;
}
return p;
},{});
我想念什么? 顯然我在減少方面存在一些問題...
您有正確的主意,但以下是操作方法:
const filteredResponseObj = rawResponseBodyObj.reduce(function(map, obj) {
map[obj.name] = obj.content;
return map;
}, {});
您可以將Object.assign
與擴展語法...
和Array#map
來生成對象。
var array = [{ name: 'CarNo', attributes: {}, children: [], content: '?' }, { name: 'AccNo', attributes: {}, children: [], content: '?' }, { name: 'SCS', attributes: {}, children: [], content: '?' }], result = Object.assign(...array.map(o => ({ [o.name]: o.content }))); console.log(result);
使用c === 'name'
這行代碼,您試圖將初始數組中的對象與字符串name
。 這樣的比較將永遠給false
正確的方法應如下所示:
var arr = [ { name: 'CarNo', attributes: {}, children: [], content: '?' }, { name: 'AccNo', attributes: {}, children: [], content: '?' }, { name: 'SCS', attributes: {}, children: [], content: '?' }], filtered = arr.reduce(function (r, o) { if (!r[o.name]) r[o.name] = o['content']; return r; }, {}); console.log(filtered);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.