查找元素并替换它

时间:2017-09-29 20:08:13

标签: javascript arrays

我想创建一个函数(或使用库),它将搜索对象数组,通过其属性查找特定对象,并将其替换为另一个对象。 E.g:

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})

有这样的功能吗?

编辑: 如果数组中没有匹配的对象,它会将它推送到对象

的数组,这将是很好的

4 个答案:

答案 0 :(得分: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 :(得分:1)

您可能正在寻找splice周围的包装。

您的示例如下所示:

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

答案 2 :(得分: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并在之后添加该人。

答案 3 :(得分:0)

由于您要修改原始数组,可以使用array#forEach(),只需遍历数组并替换与您的a对象名匹配的对象。

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; }