我认为有一个简单的解决方案,但我已经工作了很长时间我的大脑都在煎。
我有两个阵列说:例如:
[{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
两次,然后将年龄增加两倍。
答案 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);