数组合并但跳过相同的键?

时间:2015-04-18 08:11:30

标签: javascript jquery

a = ["same", "same", "unique"];
b = [1,2,3];

var c = {};
for (i = 0; i < a.length; i++) {
    c[a[i]] = b[i];
}

console.log(c);

在控制台中,我看到Object {same: 2, unique: 3},2&#39;相同&#39; key已成为1,我想知道它为什么不生成Object {same: 1,same: 2, unique: 3}

3 个答案:

答案 0 :(得分:2)

发生这种情况是因为:
第一个电话c['same']=1c['same']=2

覆盖

解决方案

您希望将多个值放在相同的键下,这意味着您希望将数组放在该键中而不是单个值。

所以这将解决你的问题:

a = ["same", "same", "unique"];
b = [1,2,3];

var c = {};
for (i = 0; i < a.length; i++) {
    c[a[i]] ? c[a[i]].push(b[i]) : ( c[a[i]] = [ b[i] ] );
}

console.log(c);

然后查看地图的结构(c变量):

enter image description here

答案 1 :(得分:0)

  

2'相同'键变为1

是的,一个对象不能包含两个具有相同名称的属性,因此在您的示例中,您将两次写入“same”键,第二个值(2)将覆盖第一个值(1)。

原因很简单。如果您可以使用a = { same: 1, same: 2, unique: 3 }之类的内容,a.same的价值是什么?

答案 2 :(得分:0)

如果需要,可以反转数组,并获得输出Object {1:same,2:same,3:unique}