将对象添加到现有对象javascript的嵌套forEach循环
有没有比我下面所做的更好的方法来迭代两个对象数组?这样做似乎很麻烦。我用的是lodash将对象添加到现有对象javascript的嵌套forEach循环,javascript,arrays,object,lodash,Javascript,Arrays,Object,Lodash,有没有比我下面所做的更好的方法来迭代两个对象数组?这样做似乎很麻烦。我用的是lodash var array1 = [ {id:4356, name: 'James', sex: 'male'}, {id:7899, name: 'Jimmy', sex: 'male'}, {id:2389, name: 'Dawn', sex: 'female'} ]; var array2 = [ {id:4356, salary: 1000, job: 'programme
var array1 = [
{id:4356, name: 'James', sex: 'male'},
{id:7899, name: 'Jimmy', sex: 'male'},
{id:2389, name: 'Dawn', sex: 'female'}
];
var array2 = [
{id:4356, salary: 1000, job: 'programmer'},
{id:7899, salary: 2000, job: 'tester'},
{id:2389, salary: 3000, job: 'manager'}
];
示例输出:
console.log(array1[0])
{
id:4356,
name: James,
sex: male,
person: {
id:4356,
salary: 1000,
job: programmer
}
}
功能:
_.forEach(array1, function(item1) {
_.forEach(array2, function(item2) {
if(item1.id === item2.id){
item1.person = item2;
}
});
});
由于您使用的是lodash,因此可以使用根据
id
属性在array2
中查找相应的对象
_.forEach(array1, function(item1) {
item1.person = _.find(array2, {id: item1.id});
});
值得指出的是,如果找不到对象,这将导致未定义的person
属性。如果出现问题,只需检查是否返回了对象:
_.forEach(array1, function(item1) {
var obj = _.find(array2, {id: item1.id});
if (obj) {
item1.person = obj;
}
});
如果没有lodash,情况将非常相似:
array1.forEach(function(item1) {
item1.person = array2.find(function (item2) {
return item2.id === item1.id;
});
});
我将构建一个引用对象并添加到其中,这样就不会加载第二个数组N次。大概是这样的:
var array1 = [{id:4356, name: 'James', sex: 'male'},
{id:7899, name: 'Jimmy', sex: 'male'},
{id:2389, name: 'Dawn', sex: 'female'}
];
var array2 = [{id:4356, salary: 1000, job: 'programmer'},
{id:7899, salary: 2000, job: 'tester'},
{id:2389, salary: 3000, job: 'manager'}
];
var array3 = {};
for(var i in array1) {
array3[array1[i]['id']] = array1[i];
}
for(var i in array2) {
for(var key in array2[i]) {
array3[array2[i]['id']][key] = array2[i][key];
}
}
这将为您提供一个具有两个数组属性的对象,如:
Object {2389: Object, 4356: Object, 7899: Object}
这样做的好处是,您只需在每个数组上迭代一次。首先将其中一个数组转换为
id->person
map?Gruff Bunny答案的可能副本(如上链接)非常全面。