【问题标题】:Merge duplicate array keys in a multidimensional array合并多维数组中的重复数组键
【发布时间】: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


【解决方案1】:

我的意见:

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);

【讨论】:

    【解决方案2】:

    这是一个快速的方法:

    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);
    

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 1970-01-01
      • 2023-04-02
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多