2017-09-21 7 views
3

の配列から、私はこのようなオブジェクトの配列からJSONオブジェクトを構築するためにtypescriptですを使用しようとしている:[ビルドJSONオブジェクト

[ 
    { attribute: 'a', modifier: 121 }, 
    { attribute: 'b', modifier: 67 }, 
    { attribute: 'c', modifier: 121 }, 
    { attribute: 'd', modifier: 67 } 
] 

私のようなものを取得したいと思い:

{ 
    a: 121, 
    b: 67, 
    c: 121, 
    d: 67 
} 

しかし、高次関数の周りに頭を浮かべて機能させることはできません。

答えて

4

あなたはパラメータコールバック関数として受け入れるreduce方法を使用することができます。

reduceの詳細については、hereを参照してください。

let array=[ 
 
    { attribute: 'a', modifier: 121 }, 
 
    { attribute: 'b', modifier: 67 }, 
 
    { attribute: 'c', modifier: 121 }, 
 
    { attribute: 'd', modifier: 67 } 
 
]; 
 
let obj=array.reduce(function(obj,item){ 
 
    obj[item.attribute] = item.modifier; 
 
    return obj; 
 
},{}); 
 
console.log(obj);

2

あなたはArray#mapと組み合わせてObject.assignを使用することができます。

var array = [{ attribute: 'a', modifier: 121 }, { attribute: 'b', modifier: 67 }, { attribute: 'c', modifier: 121 }, { attribute: 'd', modifier: 67 }], 
 
    result = Object.assign(...array.map(o => ({ [o.attribute]: o.modifier }))); 
 

 
console.log(result);

var array = [{ attribute: 'a', modifier: 121 }, { attribute: 'b', modifier: 67 }, { attribute: 'c', modifier: 121 }, { attribute: 'd', modifier: 67 }], 
 
    result = Object.assign(...array.map(({ attribute, modifier }) => ({ [attribute]: modifier }))); 
 

 
console.log(result);

1

destructuring assignmentでは、これを試してみてください。

var arr = [ 
 
    { attribute: 'a', modifier: 121 }, 
 
    { attribute: 'b', modifier: 67 }, 
 
    { attribute: 'c', modifier: 121 }, 
 
    { attribute: 'd', modifier: 67 } 
 
] 
 
var map = {}; 
 
arr.forEach(function(item){ map[ item.attribute ] = item.modifier }); 
 
console.log(JSON.stringify(map, 0, 4))

関連する問題