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