【问题标题】:Nested forEach loops to add object to existing object javascript嵌套 forEach 循环将对象添加到现有对象 javascript
【发布时间】:2016-04-20 06:57:07
【问题描述】:

有没有比我在下面所做的更好的方法来遍历两个对象数组?这样做似乎很乱。我正在使用 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: '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;
        }
     });
});

【问题讨论】:

标签: javascript arrays object lodash


【解决方案1】:

由于您使用的是lodash,您可以使用_.find() method 根据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;
    });
});

【讨论】:

    【解决方案2】:

    我会构建一个引用对象并添加到它,这样您就不会加载第二个数组 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}
    

    好处是您只需对每个数组进行一次迭代。

    【讨论】:

      猜你喜欢
      • 2018-05-19
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 2018-03-23
      • 2023-01-12
      相关资源
      最近更新 更多