繁体   English   中英

查找两个数组之间的匹配元素并更新它们

[英]Find matching elements between two arrays and update them

我认为有一个简单的解决方案,但是我一直在努力,直到我的大脑被炸掉。

我有两个数组,例如:

[{name: "bob", age: 5},
 {name: "bob", age: 6}
 {name: "jim", age: 7}]

和我想匹配的数组:

[{name: "bob", age: 5},
 {name: "bob", age: 6}]

我想遍历第一个数组,并将所有name: bob条目更新为age + 1 因此,得到的第一个数组将是:

[{name: "bob", age: 6},
 {name: "bob", age: 7}
 {name: "jim", age: 7}]

我已经尝试过两次遍历array1,然后遍历array2的循环,但是我遇到的问题是我将bob匹配两次,并依次增加了年龄两次。

 const persons = [{name: "bob", age: 5}, {name: "bob", age: 6}, {name: "jim", age: 7}];

 const personsThatGotOlderToday = [{name: "bob" } /*...*/];

 for(const person of persons) {
   if(personsThatGotOlderToday.some(p => p.name === person.name)) 
     person.age++;
 }

但是,变老的人数组实际上应该只包含人名...或应该直接引用人对象,从而使嵌套循环不必要。

您可以使用Array.map遍历array1并返回modified数组。

Array.map内部,使用Array.find方法查找current object是否在array2 如果找到对象,则更新age否则返回原始数组。

 var array1 = [{name: 'bob', age: 5}, {name: 'bob', age: 6}, {name: 'jim', age: 7}] var array2 = [{name: 'bob', age: 5}, {name: 'bob', age: 6}] var array3 = array1.map(arr => { if (array2.find(a => a.name === arr.name && a.age === arr.age)) { arr.age++; } return arr; }); console.log(array3); 

您可以使用forEach遍历数组,并使用.find在另一个数组中查找。 如果是,请增加年龄,否则不进行任何操作

 var arr = [{name: "bob", age: 5}, {name: "bob", age: 6}, {name: "jim", age: 7}] var arr1 = [{name: "bob", age: 5}, {name: "bob", age: 6}] arr.forEach(e=> arr1.find(a=> a.name === e.name) ? e.age++ :null) console.log(arr) 

for (var i = 0; i < arr1.length(); i++)
  for (var j = 0; i < arr2.length(); j++)
    if (JSON.stringify(arr1[i]) === JSON.stringify(arr2[j])) {
      arr1[i].age += 1 

可能是一些小的语法错误,因为我很快就指出了这一点

 var array1 = [{"name": "bob", "age": 5}, {"name": "bob", "age": 6}, {"name": "jim", "age": 7}]; var array2 = [{"name": "bob", "age": 5},{"name": "bob", "age": 6}] var array3 = array1.map(val =>{val.age = array2.filter(obj => obj.name == val.name).length>0? val.age +1 : val.age; return val;}); console.log(array3); 

这是es5格式适用于我:

  var arr = [{name: "bob", age: 5},{name: "bob", age: 6}, {name: "jim", age: 7}]; for(var i = 0; i< arr.length; i++){ if(arr[i].name == "bob"){ arr[i].age+=1; } } console.log(arr); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM