【发布时间】:2013-09-18 16:50:08
【问题描述】:
所以我想让我的 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]]
我不认为数组会有大量的值,所以如果答案不是非常有效,那也不会破坏交易。
编辑:
这是我尝试过的,它对我有用。
之前有人发布了这个答案,我真的很喜欢它,但后来它被删除了。所以我要把它贴出来看看别人怎么想。我不拿道具!
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);
第二部分是可选的。它将对象转换回数组。
不确定是谁发布的,但我喜欢这样做的方式。
【问题讨论】:
-
请尝试一下,并在您提出问题时发布您尝试过的内容
-
在“编辑”下方发布了我尝试过(并且有效)的内容
标签: javascript arrays multidimensional-array duplicates