2017-05-04 4 views
-1

Hallo Ich versuche, ein JSON-Datentyp von einem Format in ein anderes Hashmap zu transformieren: ObjektReduzierung Array von Objekten in JS

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

Das Ziel basiert auf dem Namen Eigenschaft würde und den Inhalt Eigenschaft:

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

ich dachte ich dies nur verringern könnte, aber ich bin versagt:

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

Was bin ich mis singen? klar habe ich einige Probleme mit der Reduktion ...

Antwort

0

Mit dieser Linie Mit c === 'name' Sie versuchen, Vergleichen Sie ein Objekt aus dem ursprünglichen Array mit der Zeichenfolge name.

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

Sie nutzen könnten Object.assign mit spread syntax ... und Array#map für die Objekterzeugung: Ein solcher Vergleich wird immer false

Der richtige Weg, wie unten sein geben sollte.

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);