2017-09-29 81 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; }