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

时间:2017-08-30 12:21:10

标签: javascript arrays typescript ecmascript-6

提供如下对象数组:

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

我想从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
}

3 个答案:

答案 0 :(得分:4)

你可以简单地concat数组并在循环中创建一个新数组:

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 1 :(得分:2)

您可以使用点差语法...map()来获取fields属性

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

如果没有filter(Boolean)属性,您还可以添加fields以删除未定义。

&#13;
&#13;
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)
&#13;
&#13;
&#13;

答案 2 :(得分:1)

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

代码:

.instagram-individual-image-container