2010-12-04 7 views
1

にオブジェクトの配列更新:私は次のようなJavaScriptのオブジェクトの配列を持っているのJavaScript

var food = [ 
    {id: 1, name: 'Apples', owned: true }, 
    {id: 2, name: 'Oranges', owned: false }, 
    {id: 3, name: 'Bananas', owned: true } 
]; 

をその後、私は次のようなデータを持つ別の配列を受け取ります。

var newFood = [ 
    {id: 1, name: 'Peas'}, 
    {id: 2, name: 'Oranges'}, 
    {id: 3, name: 'Bananas'}, 
    {id: 4, name: 'Grapefruits'} 
]; 

どのように更新することができます前のfoodの新しい情報を持つnewFeedのないのプロパティを上書きすると、新しいオブジェクトにowned: falseが追加されます。

これは、jQueryではなくプレーンなjavascriptであることに注意してください。

答えて

5

あなたは、おそらくそう配列の代わりに食品のオブジェクトを作るidでインデックス食品にしたいと思います:

var food = { 
1: {name: "Apples", owned: true}, 
//... 
} 

その後、newFoodを反復処理し、適切なフィールドを更新。

0

これは動作します。私たちはそれに存在する果物を知っているように、

var temp = {}; 

for (var i = 0, l = food.length; i < l; i += 1) { 
    temp[food[i].name] = true; 
} 

for (var i = 0, l = newFood.length; i < l; i += 1) { 
    if (!temp[newFood[i].name]) { 
     food.push({ id: food.length + 1, name: newFood[i].name, owned: false }); 
    } 
} 

最初for文は、food配列から果物の名前でtempオブジェクトを移入します。この場合、tempはこのようになります。そして、

{ "Apples": true, "Oranges": true, "Bananas": true } 

newFoodその果実は tempに存在し、そして場合の各果物のための第二 forの文をチェックしに新しい配列項目を押すとそれが、ない場合 foodアレイ。

0

このようなものは何ですか? JSFiddle Example

はJavaScript

function updateFood(newFood, oldFood) { 
    var foodLength = oldFood.length - 1; 
    for (var i = 0; i < newFood.length; i++) { 
     if (i > foodLength) { //add more if needed 
      newFood[i].owned = false; 
      oldFood.push(newFood[i]); 
     } else if (!food[i].owned) { //replace if needed 
      newFood[i].owned = false; 
      oldFood[i] = newFood[i]; 
     } 
    } 
} 
3

私はあなたの問題を解決するためunderscore.jsを使用することができると思います。

var arrayObj = [ 
       {Name:'John',LastName:'Smith'}, 
       {Name:'Peter',LastName:'Jordan'}, 
       {Name:'Mike',LastName:'Tyson'} 
       ]; 

var element = _.findWhere(arrayObj, { Name: 'Mike' }); 
element.Name="SuperMike"; 

console.log(arrayObj); 
関連する問題