合并数组对象数组中
问题描述:
给出如下对象的数组:合并数组对象数组中
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
}
答
你可以简单地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);
答
您可以使用传播语法...
和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)
答
您可以使用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);
对于工作的代码,你想回顾,见https://codereview.stackexchange.com/ –
检查的答案是什么,你到底要 –
我m投票结束这个问题作为脱离主题,因为它更适合https://codereview.stackexchange.com –