通过匹配id映射2个数组

时间:2016-05-07 02:38:15

标签: javascript arrays

数组一,arr缺少数量属性,但是我有一个与arr具有相同id的arr2,试图使用javascript函数的map()但是不能正常工作。



NSObject *obj




我希望我的arr3输出会像这样

var arr = [{id:1,'name':'banana'},{id:2,'name':'watermelon'}];
var arr2 = [{id:1,'qty':1},{id:1,'qty':4}];

var arr3 = arr.map(function(obj,i){
return obj.id == arr2.id;
//return obj.id
});

document.write(arr3);

2 个答案:

答案 0 :(得分:1)

你必须在第二个数组中进行查找。如果它是基于索引的,你可以更容易地做到,但在你的情况下,这是一个很好的选择:

var arr3 = arr.map(function(obj,i){
    var arr2match = arr2.filter( function(x){
        return x.id == obj.id;
    })[0];
    obj.qty = arr2match.qty;
    return obj;
});

答案 1 :(得分:0)

这有点长,但可能有更多实用程序,因为它将复制第二个数组中的所有属性(不仅仅是数量)。结果是一个关联数组,它包含所有id字段的唯一键。

var arrAssoc = {};
arr.map(
    function(obj,i) {
        arrAssoc[obj.id] = obj;
    }
);
arr2.map(
    function(obj,i) {
        for (var key in obj) {
            if (key != 'id' && arrAssoc[obj.id] && obj.hasOwnProperty(key)) {
                arrAssoc[obj.id][key] = obj[key];
            }
        }
    }
);

奖金回合,这是你想要的结果

arr3 = arr.map(
    function(obj,i) {
        return arrAssoc[obj.id];
    }
);
相关问题