如何将一个对象数组的一个属性的值赋给另一个对象数组的类似命名属性? – Javascript

这是我的代码

我有2个对象数组 – arr1和arr2

  var arr1 = [{
        id: 1,
        city: 'London',
        'checked': false
        },
        {
        id: 2,
        city: 'NYC',
        'checked': false
        },
        {
        id: 3,
        city: 'Paris',
        'checked': false
        },
        {
        id: 4,
        city: 'Madrid',
        'checked': false
        }];


 var arr2 = [{
        id: 1,
        city: 'Madrid',
        'checked': true
        },
        {
        id: 2,
        city: 'Paris',
        'checked': false
        },
        {
        id: 3,
        city: 'NYC',
        'checked': true
        },
        {
        id: 4,
        city: 'London',
        'checked': false
        }];

使用这两个对象数组,我想创建一个arr3变量/对象数组(arr3将保留arr1的顺序 – 首先是伦敦,然后是纽约,第三个巴黎和最后一个马德里.我只想检查arr2对象和将该字段(已检查属性)值放在arr1中并创建arr3.不应更改顺序,只需检查arr1将从arr2的选中获取其值.

  var arr3 = [{
        id: 1,
        city: 'London',
        'checked': false
        },
        {
        id: 2,
        city: 'NYC',
        'checked': true
        },
        {
        id: 3,
        city: 'Paris',
        'checked': false
        },
        {
        id: 4,
        city: 'Madrid',
        'checked': true
        }];

我也可以选择不使用arr3,然后我可以直接在arr1中进行更改.这也是另一种方式.任何技术都适合我.

更新 – arr3中id属性的顺序应与arr1中的顺序相同

最佳答案
解释

通过这种方法,它使用了更多的现代方法,使用了诸如mapfind之类的功能,而且我个人发现这种实现非常简单.

如果您不熟悉’箭头功能’语法,可以在线找到大量文档,例如this.但正如您所看到的,这种方法的优点在于它干净,简洁和简单.

这个实现有点类似于@holydragon提供的答案,但是当你使用forEach函数时,你允许副作用发生,至少在这个实现中,通过使用map,这应该减少一边的机会代码中的效果.

此外,我还使用了destructuring assignment,以进一步减少此片段中副作用的几率.

更新

我使用解构赋值实现了我的解决方案,不是因为它是“现代的”或类似的东西.这是因为在没有创建对象副本的情况下,在arr3中修改对象的checked属性时,arr1中找到的对象中的已检查属性也会更新.

这是副作用的一个例子,如果您想深入研究函数式编程,相关概念以及使用JavaScript进行函数式编程,我强烈建议您阅读一些Eric’s内容.就个人而言,我是Eric发布的内容的粉丝,当我尝试将函数式编程概念应用于JavaScript时,我发现他的内容很有用.

var arr1 = [{id:1,city:"London",checked:!1},{id:2,city:"NYC",checked:!1},{id:3,city:"Paris",checked:!1},{id:4,city:"Madrid",checked:!1}];
var arr2 = [{id:1,city:"Madrid",checked:!0},{id:2,city:"Paris",checked:!1},{id:3,city:"NYC",checked:!0},{id:4,city:"London",checked:!1}];


var arr3 = arr1.map(({...o}) => {
  o.checked = arr2.find(x => x.city === o.city).checked;
  return o;
});
console.log(arr3);

// If you want a one line solution... 
var arr4 = arr1.map(({...o}) => Object.assign(o, {checked : arr2.find(x => x.city === o.city).checked}));
console.log(arr4);

转载注明原文:如何将一个对象数组的一个属性的值赋给另一个对象数组的类似命名属性? – Javascript - 代码日志