得到了这样的数组:
let arr = [
[
{"key":2, "other":123},
{"key":2, "other":222}
],
[
{"key":3, "other":0}
],
[
{"key":1, "other":11},
{"key":1, "other":23}
],
[
{"key":1, "other":22}
]
]
我需要得到这个 arr
但分组数组的第一个元素具有相同的“键”值,所以它看起来像:
let arr = [
[
{"key":2, "other":123},
{"key":2, "other":222}
],
[
{"key":3, "other":0}
],
[
[
{"key":1, "other":11},
{"key":1, "other":23}
],
[
{"key":1, "other":22}
]
],
]
我尝试使用 reduce 函数,但结果完全不同。
let final = []
for (let i=0; i<arr.length; i++) {
let arr1 = i==0?arr:arr.slice(i)
let final1 = arr1.reduce((acc,x)=> {
acc = acc[0].key==x[0].key?acc.concat(x):acc
return acc
})
arr1.length>1&&final.push(final1)
}
在这段代码中,问题在于它将 arr[1] 与 arr[2]、arr[3] 进行比较,然后再次将 arr[2] 与 arr[3] 进行比较并将其分组(即使 arr[1].key和 arr[2].key 和 arr[3].key 是相同的)你能给一些提示或给出最终的功能来做到这一点吗?
最佳答案
let arr = [
[
{"key":2},
{"key":2}
],
[
{"key":3}
],
[
{"key":1},
{"key":1}
],
[
{"key":1}
]
]
var myMap = new Map();
for (i = 0; i < arr.length; i++) {
if(!myMap.has(arr[i][0]['key'])){
myMap.set(arr[i][0]['key'],i)
}else if(myMap.get(arr[i][0]['key'])===undefined){
myMap.set(arr[i][0]['key'],i)
}else{
myMap.set(arr[i][0]['key'],myMap.get(arr[i][0]['key'])+','+i)
}
}
var out =[];
for(var v of myMap.values()){
var s = String(v).split(",");
var fi = s[0]
var subarray =[]
for(var i in s){
subarray.push(arr[s[i]])
}
out[fi] = subarray;
}
您会在 out 数组中找到您的回复。希望对你有用
关于javascript - 如何按第一个元素对象键对数组中的数组进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56377604/