2017-09-29 79 views
-1

我想創建一個函數(或使用庫),它將搜索對象數組,並通過其屬性查找特定的對象,並將其替換爲另一個對象。例如:查找元素並將其替換爲

var a = {name: "Jane", age: 29} 

var arr = [{name: "Chris", age: 20}, {name: "Jane", age: 45}] 

arr.find(person => { if (a.name === person.name) {person = a}) 

有沒有這樣的功能?

編輯: 如果在數組沒有匹配的對象,將其推到該對象

回答

0

你可以使用find()方法,因爲這樣的:

var jane = {name: "Jane", age: 29} 

var persons = [ 
    {name: "Chris", age: 20}, 
    {name: "Jane", age: 45} 
]; 

function findPerson(person) { 
    return function(element, index, array) { 
     if(person.name === element.name) { 
      array[index] = person; 
      return true; 
     } 
     return false; 
    } 
} 

persons.find(findPerson(jane)); 

如果發現這將替換匹配的人與其他人返回undefined。所以你可以檢查undefined是否被返回,然後添加這個人。

2

我只能想到Array#map

var a = {name: "Jane", age: 29} 
 

 
var arr = [{name: "Chris", age: 20}, {name: "Jane", age: 45}] 
 

 
arr = arr.map(function(o){ 
 

 
    // if names match, return new object 
 
    // otherwise, return original object 
 
    return o.name == a.name ? a : o; 
 

 
}); 
 

 
console.log(arr);

1
數組這將是很好

您可能正在尋找一個圍繞splice的包裝。

你的榜樣應該是這樣的:

arr.forEach((elem, index) => { 
    if (elem.name !== a.name) return 
    arr.splice(index, 1, a) 
}) 
1

由於您要修改原始數組,因此您可以使用array#forEach(),只需遍歷數組並替換與您的對象名稱匹配的對象即可。

var a = {name: "Jane", age: 29} 
 
var arr = [{name: "Chris", age: 20}, {name: "Jane", age: 45}] 
 

 
arr.forEach((person,index) => { 
 
if (a.name === person.name) 
 
    arr[index] = a; 
 
}) 
 
console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }