一个简单的数组问题,ES6如何优雅的解决,萌新求救

let a = [ { name:"1", status:"1" }, { name:"2", status:"1" }, { name:"3", status:"2" }, { name:"4", status:"2" }, { name:"5", status:"3" }, { name:"6", status:"bbb" } ]
     
{ '1':[{ name:"1", status:"1" }, { name:"2", status:"1" }], '2':[{ name:"3", status:"2" }, { name:"4", status:"2" } ], '3':[ { name:"5", status:"3" }],'bbb':[{ name:"6", status:"bbb" }] }

用ES6如何把上面的变成下面这种结构,萌新求救。 就是把status提出来当下面的键值。

阅读 2.5k
3 个回答

不用一个一个 push,对每一个 status 直接 filter 一下就行了

let result = a.reduce((acc, {status}) => (
  acc[status] ? acc: {
    ...acc,
    [status]: a.filter(item => item.status === status)
  }
), {})
var result = {};
a.forEach(item => {
    result[item.status] = result[item.status] || [];
    result[item.status].push(item);
});

console.log(result)
var b = {};
a.forEach(function (obj) {
    var array = b[obj['status']] || [];
    array.push(obj);
    b[obj['status']] = array;
});
console.log(b);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题
宣传栏