2017-05-04 82 views
-1

嗨我想一個JSON數據類型轉換從一種格式到另一個HashMap中:減少對象的數組中的JS

[ { name: 'CarNo', attributes: {}, children: [], content: '?' }, 
     { name: 'AccNo', attributes: {}, children: [], content: '?' }, 
    { name: 'SCS', attributes: {}, children: [], content: '?' }] 

目標對象將根據name屬性和內容屬性:

{'CarNo': '?', 'AccNo': '?', 'SCS': '?' } 

我想我可能只是降低這一點,但我失敗:

 const filteredResponseObj = Object.keys(rawResponseBodyObj).reduce((p,c)=>{ 
      if(c === 'name'){ 
      p[c]=rawResponseBodyObj[c].content; 
      } 
      return p; 
     },{}); 

我是什麼錯誤唱?顯然,我有一些問題與削減...

回答

0

這一行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);

1

你可以使用Object.assignspread syntax ...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);