2017-08-30 130 views
0

給出如下對象的數組:合併數組對象數組中

var objArray = [{'key': 'key1', 'fields': [1, 2]}, {'key': 'key2', 'fields': [3, 4]}]; 

我想獲得從場特性,並輸出合併項目的數組應該是1, 2, 3, 4

我已經試圖合併如下。我對我的解決方案不滿意,希望獲得反饋並改進我的解決方案。我是JS和打字稿的新手。我相信ES6的功能有更好的解決方案。 有人可以幫助改善我的解決方案嗎?

function mergeArraysFromObjectArray(objArray){ 
    let allFields = []; 
    for (let obj of objArray) { 
     for (let propt in obj) { 
     if (obj.hasOwnProperty(propt) && propt === 'fields') { 
      allFields = allFields.concat(obj[propt]); 
     } 
     } 
    } 

    return allFields; 
} 

var objArray = [{'key': 'key1', 'fields': [1, 2]}, {'key': 'key2', 'fields': [3, 4]}]; 
let allMergedFields = mergeArraysFromObjectArray(objArray); 

for(let i=0; i < allMergedFields.length; i++){ 
    console.log(allMergedFields[i]); //prints - 1, 2, 3, 4 
} 
+1

對於工作的代碼,你想回顧,見https://codereview.stackexchange.com/ –

+0

檢查的答案是什麼,你到底要 –

+1

我m投票結束這個問題作爲脫離主題,因爲它更適合https://codereview.stackexchange.com –

回答

4

你可以簡單地concat陣列並創建一個循環中一個新的數組:

var objArray = [{'key': 'key1', 'fields': [1, 2]}, {'key': 'key2', 'fields': [3, 4]}]; 
 

 
var result = []; 
 
for(var i=0; i<objArray.length; i++){ 
 
    result = result.concat(objArray[i].fields); 
 
} 
 

 
console.log(result);

2

您可以使用傳播語法...map()得到fields財產

var objArray = [{'key': 'key1', 'fields': [1, 2]}, {'key': 'key2', 'fields': [3, 4]}]; 
 
var result = [].concat(...objArray.map(({fields}) => fields)) 
 
console.log(result)

您還可以添加filter(Boolean)除去不確定的情況下,沒有fields財產。

var objArray = [{'key': 'key1', 'asdf': [1, 2]}, {'key': 'key2', 'fields': [3, 4]}]; 
 
var result = [].concat(...objArray.map(e => e.fields).filter(Boolean)) 
 
console.log(result)

0

您可以使用Array.prototye.reduce()Array.prototype.concat()結合。

代碼:

const objArray = [{'key': 'key1', 'fields': [1, 2]}, {'key': 'key2', 'fields': [3, 4]}], 
 
     result = objArray.reduce((a, c) => [].concat(a, c.fields), []); 
 

 
console.log(result);