把 id 一样的合并
var array = [
{ id: 1, spec: 1 },
{ id: 5, spec: 2 },
{ id: 2, spec: 5 },
{ id: 2, spec: 10 },
{ id: 1, spec: 12 },
{ id: 3, spec: 12 },
{ id: 4, spec: 15 },
{ id: 3, spec: 16 }
]
转变为
[
{ id: 1, spec: [ 1, 12 ] },
{ id: 5, spec: [ 2 ] },
{ id: 2, spec: [ 5, 10 ] },
{ id: 3, spec: [ 12, 16 ] },
{ id: 4, spec: [ 15 ] }
]
自己的思路似乎很烦 大概思路是出现过得 id 添加到了 idarray 里,然后迭代数组每一项,id 出现过就创建一个新对象,没有就选出那个对象往数组后面添加东西
function arrayChange(array){
let idArray = []
let newArray = []
for (let index = 0; index < array.length; index++) {
const element = array[index];
if (idArray.includes(element.id)) {
let curEle = newArray.filter(item => item.id === element.id)
curEle[0].spec.push(element.spec)
} else {
idArray.push(element.id)
let obj = {}
obj.id = element.id
obj.spec = []
obj.spec.push(element.spec)
newArray.push(obj)
}
}
return newArray
}
console.log(arrayChange(array))
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.