2017-09-29 13 views
-1

Ich möchte eine Funktion (oder Bibliothek verwenden), die das Array von Objekten suchen bestimmte durch seine Eigenschaft suchen und durch das andere Objekt ersetzen. Zum Beispiel:Suchen Element und ersetzen Sie es

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

Gibt es eine solche Funktion?

Edit: Es wäre schön, wenn es keine abgestimmte Objekt in Array ist, würde es zu einer Reihe schieben, die

Antwort

0

Sie konnten die find() Methode, die als solche verwendet werden:

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

Dies würde die abgestimmte Person ersetzen, wenn gefunden und sonst kehrt undefiniert. Sie können also überprüfen, ob undefined zurückgegeben wird, und die Person anschließend hinzufügen.

2

ich nur widersprechen kann Array#map denken

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

Sie suchen wahrscheinlich nach einem Wrapper um splice.

Ihr Beispiel würde wie folgt aussehen:

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

Da Sie das ursprüngliche Array ändern möchten, können Sie array#forEach() verwenden, durchlaufen Sie einfach das Array und ersetzen Sie das Objekt, das Ihrem a Objektname entspricht.

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