vue 如何将后台返回的对象数组根据某个字段组成新的对象数组,这也是我在最近项目中遇到的问题,特此整理一下,方便自己后期学习,也希望对需要的小伙伴提供帮助。
假如后台返回给我们如下数据结构:
var list = [ { "id": 1, "modes": "CHARTBAR_1", }, { "id": 2, "modes": "CHARTBAR_1", }, { "id": 3, "modes": "CHARTBAR_2", }, { "id": 4, "modes": "CHARTBAR_2", }, { "id": 5, "modes": "CHARTBAR_3", }, { "id": 6, "modes": "CHARTBAR_4", }, { "id": 7, "modes": "CHARTBAR_4", }, { "id": 8, "modes": "CHARTBAR_1", }, { "id": 9, "modes": "CHARTBAR_1", }, { "id": 10, "modes": "CHARTBAR_1", }, ]
然后,我们要让上面的数据根据 modes 字段重新组合成新的对象数组,比如整合成下面这样:
[{ "modes": "CHARTBAR_1", "list": [{ "id": 1, "modes": "CHARTBAR_1" }, { "id": 2, "modes": "CHARTBAR_1" }, { "id": 8, "modes": "CHARTBAR_1" }, { "id": 9, "modes": "CHARTBAR_1" }, { "id": 10, "modes": "CHARTBAR_1" }] }, { "modes": "CHARTBAR_2", "list": [{ "id": 3, "modes": "CHARTBAR_2" }, { "id": 4, "modes": "CHARTBAR_2" }] }, { "modes": "CHARTBAR_3", "list": [{ "id": 5, "modes": "CHARTBAR_3" }] }, { "modes": "CHARTBAR_4", "list": [{ "id": 6, "modes": "CHARTBAR_4" }, { "id": 7, "modes": "CHARTBAR_4" }] }]
实现方法:
function getListGroupBy(list, key) { var keysArr = list.map(item=>item[key]) var keys = [...new Set(keysArr)] var newList = keys.map(item=> { return { [key]: item, list: list.filter(i=>i[key] == item) } }) return newList } var newList = getListGroupBy(list, 'modes') console.log(newList)
就是这么简单!