簡體   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