[英]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.