2016-08-10 8 views
2

私はJavaScriptオブジェクトの配列を持っています。JavaScript:別の属性でデータとグループを抽出する

[ { name: "A", tp1: 10, tp2: 20, ... tp31: 30 }, 
    { name: "B", tp1: 11, tp2: 21, ... tp31: 31 }, 
    { name: "C", tp1: 12, tp2: 22, ... tp31: 32 }, 
    { name: "D", tp1: 13, tp2: 23, ... tp31: 33 } ] 

データを少しずつ変更したいと考えています。現時点では、「鍵」(いわば)が名前であると言うことができます。オブジェクトを別の属性(たとえばtp1)を使用してグループ化し、オブジェクトの各「名前」の値を独自の属性として設定します。

私の説明がひどいかもしれないが、基本的に、私は次の形式に変換したい:

[ { x: "tp1" , A: 10, B: 11, C: 12, D: 13 }, 
    { x: "tp2" , A: 20, B: 21, C: 22, D: 23 }, 
    ... 
    { x: "tp31", A: 30, B: 31, C: 32, D: 33 } ] 

私は本当にここで始めるには考えています。

ありがとうございます。使用

答えて

1

let input = [ 
 
    { name: "A", tp1: 10, tp2: 20, tp31: 30 }, 
 
    { name: "B", tp1: 11, tp2: 21, tp31: 31 }, 
 
    { name: "C", tp1: 12, tp2: 22, tp31: 32 }, 
 
    { name: "D", tp1: 13, tp2: 23, tp31: 33 } 
 
]; 
 
    
 
let output = Object.keys(input[0]) // get the properties of the first element 
 
       .filter(key => key !== "name") // "remove" the "name" property 
 
       .map(key => { // iterate over the remaining keys 
 
       return input.reduce((result, current) => { // and transform them into the required format 
 
        result[current.name] = current[key]; 
 
        return result; 
 
       }, { "x": key }); // "start" value for the first .reduce() round 
 
       }); 
 

 
console.log(output);

方法:

Object.prototype.keys()Object.keys()方法はfor...inループによって提供されるものと同じ順序で、指定されたオブジェクト自身の列挙プロパティの配列を返します(相違点は、for-inループもプロトタイプチェーンのプロパティを列挙することです)。

Array.prototype.filter()

filter()方法が提供する機能によって実現テストに合格するすべての要素を使用して新しい配列を作成します。

Array.prototype.map()map()方法は、配列の全ての要素に与えられた関数を呼び出した結果、新しい配列を作成します。

Array.prototype.reduce()reduce()方法は、単一の値に低減する(左から右)からアキュムレータアレイの各値に対して関数を適用します。

+0

ありがとう@Andreas、これはすごくうまくいった。 –

+0

あなたは大歓迎です:) – Andreas

関連する問題