Javascript 在多维数组中合并重复的数组键
因此,我希望我的2D数组具有重复的值(如下所示),以合并电子邮件地址相同的位置。电子邮件将始终处于相同的位置Javascript 在多维数组中合并重复的数组键,javascript,arrays,multidimensional-array,duplicates,Javascript,Arrays,Multidimensional Array,Duplicates,因此,我希望我的2D数组具有重复的值(如下所示),以合并电子邮件地址相同的位置。电子邮件将始终处于相同的位置 [['john.doe@example.com', 64], ['john.doe@example.com', 65], ['jane.doe@example.com', 66]] 我希望我能得到以下结果: [['john.doe@example.com', 64, 65], ['jane.doe@example.com', 66]] 我不认为数组会有太多的值,所以如果答案不是非常有
[['john.doe@example.com', 64], ['john.doe@example.com', 65], ['jane.doe@example.com', 66]]
我希望我能得到以下结果:
[['john.doe@example.com', 64, 65], ['jane.doe@example.com', 66]]
我不认为数组会有太多的值,所以如果答案不是非常有效,那就不是一个交易破坏者
编辑:
这就是我尝试过的,它对我很有效
早些时候有人发布了这个答案,我真的很喜欢,但后来被删除了。所以我要把它贴出来,看看别人怎么想。我不拿道具
var a = [['john.doe@example.com', 64], ['john.doe@example.com', 65], ['jane.doe@example.com', 66]];
var map = {};
for(var i=0; i<a.length; i++) {
if(a[i][0] in map) {
map[a[i][0]].push(a[i][1]);
} else {
map[a[i][0]] = [a[i][1]];
}
}
console.log(map);
第二部分是可选的。它将对象转换回数组
a.length = 0;
for(var p in map) {
a.push([p].concat(map[p]));
}
console.log(a);
不知道是谁发布的,但我喜欢这样做。这里有一个快速的方法:
function getIndex(a, email) {
for (var i = 0; i < a.length; i++) {
if (a[i][0] === email) {
return i;
}
}
return -1;
}
var a = [['john.doe@example.com', 64], ['john.doe@example.com', 65], ['jane.doe@example.com', 66]];
var b = []
for (var i = 0; i < a.length; i++) {
var index = getIndex(b, a[i][0]);
if(index == -1){
b.push(a[i]);
}else{
b[index].push(a[i][1]);
}
};
console.log(b);
函数getIndex(a,电子邮件){
对于(变量i=0;i
我的输入:
var list = [['john.doe@example.com', 64], ['john.doe@example.com', 65], ['jane.doe@example.com', 66]],
output = [],
helper = [],
index;
for(var i = 0; i < list.length; i++) {
index = helper.indexOf(list[i][0];
if(index !== -1) {
output[index].push(list[i][1]);
} else {
helper.push(list[i][0]);
output.push(list[i]);
}
}
console.log(output);
var list=[[]约翰。doe@example.com“,64”,“约翰。doe@example.com“,65”,“简。doe@example.com', 66]],
输出=[],
helper=[],
指数
对于(变量i=0;i
请尝试,并在“编辑”下方张贴您在提问时尝试过的内容。张贴我尝试过的内容(并且有效)