从对象数组中的对象属性合并数组

Jyo*_*Pal 1 javascript arrays typescript ecmascript-6

给出一个对象数组,如下所示:

var objArray = [{'key': 'key1', 'fields': [1, 2]}, {'key': 'key2', 'fields': [3, 4]}];
Run Code Online (Sandbox Code Playgroud)

我想从 fields 属性中获取一组合并项,输出应该是 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
}
Run Code Online (Sandbox Code Playgroud)

Ank*_*wal 5

您可以简单地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);
Run Code Online (Sandbox Code Playgroud)


Yos*_*ero 5

您可以使用Array.prototye.reduce()结合解构赋值扩展语法

 objArray.reduce((a, { fields }) => [...a, ...fields], [])
Run Code Online (Sandbox Code Playgroud)

代码示例:

 objArray.reduce((a, { fields }) => [...a, ...fields], [])
Run Code Online (Sandbox Code Playgroud)