如何把对象数组中的相同对象属性放到一个数组中?

例如:let a=[{data:'1',age:'22'},,{data:'21',age:'2'},{data:'4',age:'24'},{data:'112',age:'32'}]

{
data:['1','21','4','112'],
age:['22','2','24','32']
}

阅读 1.7k
3 个回答
a.reduce((acc,cur)=>{
    Object.entries(cur).forEach(([key,val])=>{
        (acc[key]||=[]).push(val);
    })
    return acc;
}, {})
// {"data":["1","21","4","112"],"age":["22","2","24","32"]}

其实很简单而且也和 ReactJS 没什么关系,我就写一个简单的例子:

const dataSource = [{data:'1',age:'22'},,{data:'21',age:'2'},{data:'4',age:'24'},{data:'112',age:'32'}]

const result = {
  data:[],
  age:[]
}
const attrList = Object.keys(result)

// 循环dataSource数据插入到结果中
dataSource.forEach(data=>{
  attrList.forEach(attrName => result[attrName].push(data[attrName]))
})
// 输出合并的结果
console.log('result----', result)

reduce 也可以实现,但是好像并不适合举例。

相关阅读

Object.keys() - JavaScript | MDN
Array.prototype.forEach() - JavaScript | MDN
Array.prototype.push() - JavaScript | MDN

var b = {};
  a.forEach((el) => {
    for (const key in el) {
      b[key] = (b[key] ? b[key] : []).concat(el[key]);
    }
  });
  console.log(b);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏