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

时间:2018-04-19 17:37:47

标签: javascript arrays

我认为有一个简单的解决方案,但我已经工作了很长时间我的大脑都在煎。

我有两个阵列说:例如:

[{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两次,然后将年龄增加两倍。

6 个答案:

答案 0 :(得分:2)

 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++;
 }

然而,变老的人应该只是包含人名......或者它应该直接引用人物对象,使嵌套循环不必要。

答案 1 :(得分:2)

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

Array.map内,使用current object方法查找array2中是否存在Array.find。 如果找到对象,则更新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);




答案 2 :(得分:1)

您可以使用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)




答案 3 :(得分:0)

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 

可能是一些小的语法错误,因为我快速推出了

答案 4 :(得分:0)

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);

答案 5 :(得分:0)

这是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);