假设我有这个数组:
[
{"type": "A", "status": "CREATED", "name": "Jack"},
{"type": "A", "status": "CREATED", "name": "John"},
{"type": "A", "status": "UPDATED", "name": "Alex"},
{"type": "B", "status": "UPDATED", "name": "Jane"}
]
我想有一个按“ type ”和“ status ” 分组的新数组,并在列表中列出名称。这是所需的输出:
[
{"type": "A", "status": "CREATED", "name-list": ["Jack", "John"]},
{"type": "A", "status": "UPDATED", "name-list": ["Alex"]},
{"type": "B", "status": "UPDATED", "name-list": ["Jane"]}
]
如您所见,数组的第一个对象包含2个名称,因为它们属于相同的“ 类型 ”和“ 状态 ”。(名称列表仅是示例,也可以保留名称,重要的是它应该是字符串/对象的数组)
我必须在html页面中表示这些数据,因此需要能够通过JavaScript循环它们。
您可以通过Array.prototype.reduce()
构建,遍历您的源数组Map
,将type
和status
组合为键和相应的对象,并合并name
为值。然后提取Map.prototype.values()
来自Map
:
const src = [{"type":"A","status":"CREATED","name":"Jack"},{"type":"A","status":"CREATED","name":"John"},{"type":"A","status":"UPDATED","name":"Alex"},{"type":"B","status":"UPDATED","name":"Jane"}],
result = [...src
.reduce((r, o) => {
const key = o.type+'\ud8ff'+o.status,
match = r.get(key)
match ? match.name.push(o.name) : r.set(key, {...o, name: [o.name]})
return r
}, new Map())
.values()
]
console.log(result)
.as-console-wrapper{min-height:100%;}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句