簡體   English   中英

在JS中將對象數組減少為哈希圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM