如果第二个对象数组具有相同的值,则将数组添加到对象数组内的对象

时间:2017-05-31 06:25:18

标签: javascript arrays

所以,如果我有两个具有相同键和值的数组:

var firstArr = [{name:'Lorem', post_id:2},{name:'Ipsum', post_id:1}];
var secondArr = [{sec:'Deca', another_id:2},{sec:'Meca', another_id:1},{sec:'Raca', another_id:2}];

我想要实现的目标是:

firstArr.map(function(item,i) {
if(item.post_id === secondArr[i].another_id) {
   item.randKey = secondArr[i]
}

});

但这输出是错误的 结果是

firstArr[0];
Object {name: "Lorem", post_id: 2, randKey: Array(1)}

我想要实现的是

 firstArr[0];
    Object {name: "Lorem", post_id: 2, randKey: Array(2) = {sec:'Deca', another_id:2},{sec:'Raca', another_id:2} }

所以我的问题是它只附加一个数组,但它应该追加两个if(post_id = 2 === another_id = 2)

我希望我足够清楚。

2 个答案:

答案 0 :(得分:1)

尝试使用Array#forEach进行迭代,firstArrayArray#filter用于过滤secondArr并尊重postid匹配

var firstArr = [{name:'Lorem', post_id:2},{name:'Ipsum', post_id:1}];
var secondArr = [{sec:'Deca', another_id:2},{sec:'Meca', another_id:1},{sec:'Raca', another_id:2}];


 firstArr.forEach(function(item,i) {
  item.randKey = secondArr.filter(a=> a.another_id == item.post_id)
});

console.log(firstArr)
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

您可以使用临时对象收集具有相同secondArr的{​​{1}}的所有项目。然后迭代another_id并分配收集的项目。



firstArr

var firstArr = [{ name: 'Lorem', post_id: 2 }, { name: 'Ipsum', post_id: 1 }],
    secondArr = [{ sec: 'Deca', another_id: 2 }, { sec: 'Meca', another_id: 1 }, { sec: 'Raca', another_id: 2 }],
    temp = {};

secondArr.forEach(function (a) {            
    temp[a.another_id] = temp[a.another_id] || [];
    temp[a.another_id].push(a);            
});

firstArr.forEach(function (a) {
    a.randKey = temp[a.post_id];
});

console.log(firstArr);