2016-06-20 19 views
-4

JavaScriptのArrayプッシュ問題を追加または更新JavaScriptのArray

私はオブジェクトを持っている:

people: [{name: peter, age: 27, email:'[email protected]'}] 

私がプッシュする:

people.push({ 
     name: 'John', 
     age: 13, 
     email: '[email protected]' 
}); 
people.push({ 
     name: 'peter', 
     age: 36, 
     email: '[email protected]' 
}); 

最終的に私はしたいです:

people: [ 
{name: 'peter', age: 36, email:'[email protected]'}, 
{name: 'john', age: 13, email:'[email protected]'}, 
] 

私はキーを持っていませんが、emai lはユニークです

+1

問題は何ですか?エントリが重複していますか? –

+0

結果の配列に末尾のカンマを除いてすべて正しいように見えます –

+1

http://stackoverflow.com/help/how-to-ask – dabadaba

答えて

1

JavaScriptのように「更新」メソッドはありません。

あなたがしなければならないことは、オブジェクトがすでに内部に入っているかどうかを確認するためにまず配列をループすることです。

function AddOrUpdatePeople(people, person){ 
    for(var i = 0; i< people.length; i++){ 
     if (people[i].email == person.email){ 
      people[i].name = person.name; 
      people[i].age = person.age; 
      return;       //entry found, let's leave the function now 
     } 
    } 
    people.push(person);      //entry not found, lets append the person at the end of the array. 
} 
1

また、Arrayメソッドを生成することで、このようにすることもできます。それは2つの議論を要する。最初はプッシュするオブジェクトを指定し、2つ目は以前に挿入されたアイテムが存在する場合に置換するかどうかを確認する一意のプロパティです。

var people = [{name: 'peter', age: 27, email:'[email protected]'}]; 
 
Array.prototype.pushWithReplace = function(o,k){ 
 
var fi = this.findIndex(f => f[k] === o[k]); 
 
fi != -1 ? this.splice(fi,1,o) : this.push(o); 
 
return this; 
 
}; 
 
people.pushWithReplace({name: 'John', age: 13, email: '[email protected]'}, "email"); 
 
people.pushWithReplace({name: 'peter', age: 36, email: '[email protected]'},"email"); 
 
console.log(people);