2017-04-13 14 views

答えて

4

あなたは部品のspread syntax ...Object.assignを使用することができます。

var object = { columns: ["name", "color"], values: [["lion", "yellow"], ["crow", "black"]] }, 
 
    result = { data: object.values.map(v => Object.assign(...object.columns.map((c, i) => ({[c]: v[i]})))) }; 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

2

マップの組み合わせで行うこともできますし、減らすこともできます。元の列配列を減らすことで、任意の数の列で動作するコードを作成できます。インデックスで対応する値を取得します。

const result = {data: data.values.map(el => { 
    return data.columns.reduce((prev, curr, index) => { 
    prev[curr] = el[index] 
    return prev 
    }, {}) 
})} 

以下のデモを確認してください。

const data = { 
 
    "columns":[ 
 
     "name", 
 
     "color" 
 
    ], 
 
    "values":[ 
 
     [ 
 
     "lion", 
 
     "yellow" 
 
     ], 
 
     [ 
 
     "crow", 
 
     "black" 
 
     ] 
 
    ] 
 
} 
 

 
const result = {data: data.values.map(el => { 
 
    return data.columns.reduce((prev, curr, index) => { 
 
    prev[curr] = el[index] 
 
    return prev 
 
    }, {}) 
 
})} 
 

 
console.log(result)

2

あなたは、分割代入、拡散要素を使用して.columns配列のバレスを得ることができます。 for..ofループは、元のオブジェクトの.valuesプロパティを反復することによってdataアレイにおけるオブジェクトのプロパティとして文字列として.columnsアレイの計算されたプロパティを割り当てる作成されたオブジェクトの値として、各配列の値を割り当てる

let obj = { 
 
    "columns":[ 
 
     "name", 
 
     "color" 
 
    ], 
 
    "values":[ 
 
     [ 
 
     "lion", 
 
     "yellow" 
 
     ], 
 
     [ 
 
     "crow", 
 
     "black" 
 
     ] 
 
    ] 
 
} 
 

 
let [res, key, value] = [{data:Array()}, ...obj.columns]; 
 

 
for (let [a, b] of [...obj.values]) res.data.push({[key]:a, [value]:b}); 
 

 
console.log(res);

関連する問題