2012-02-26 6 views
10

は、私は次のような構造を持っている:javascriptオブジェクトのプロパティを更新していますか?

skillet.person = { 
    name: { 
    first: '', 
    last: '' 
    }, 
    age: { 
    current: '' 
    }, 
    birthday: { 
    day: '', 
    month: '', 
    year: '' 
    } 
} 

私は、これらの値を更新するだろうか不思議でしたか?次のものが正しいとは言えますが、

skillet.person.name.push({ first: 'blah', last: 'ha'}); 

ですが間違っていますか?これをどうすれば解決できますか?

+4

MDNは、応答のために特にhttps://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects –

答えて

15

オブジェクトを別のオブジェクトに混在させる場合は、jQueryのディープ・エクステンション機能を使用できます。 「深い」とは、nameを新しいオブジェクトで上書きせず、そのようなオブジェクトの内部のプロパティを上書きすることを意味します。他のプロパティは変更されませんしながら、

$.extend(true, skillet.person, { 
    name: { 
    first: 'updated' 
    }, 
    birthday: { 
    day: 'updated', 
    year: 'updated' 
    } 
}); 

さて、skillet.personは、更新され、適切な特性を有しています。 ECMAScriptの2015との最近のブラウザで

+0

うん!素晴らしい感謝:)私は何を探していた – Andy

13
skillet.person.name.first = "blah" 
skillet.person.name.last = "ha" 

又は

skillet.person.name = {first : "blah", last : "ha"} 
+0

おかげで偉大なJavaScriptのチュートリアルがあります。すべての値が利用可能でない場合、プロパティを置き換えたくない場合は、各値をリストする代わりに更新する方が速いですか? – Andy

+1

@Andy:あなたは 'extend'関数を探しているかもしれません。 [実装についてはUnderscore.jsを参照してください。](@documentcloud.github.com/underscore/#extend) – pimvdb

+0

@pimvdb - 現在、プロパティのヒープがありますが、すべてに値が含まれているわけではありません。私はオブジェクトを部分的な妥当性で置き換えていましたが、それは問題を引き起こしていました - これはMrEが行ったように各値をリストアップしなければならないか、 – Andy

4

pushアレイに新しい項目を追加Arrayの方法です。

あなたは、値を置き換えたい場合:

skillet.person.name = { … }; 

を使用すると、オブジェクト内の複数の(フル)名を格納する場合は、あなたがするのではなく、オブジェクトの配列を保持するためのプロパティが必要になります単一のオブジェクト。

+0

交換したくない場合は、各値をリストする代わりに、更新する方が早いのですか? – Andy

+2

@Andy:オブジェクトのプロパティを反復処理できます。 'for(var prop in newValues){oldValues [prop] = newValues [prop];}'(要点)です。 MDNはまた 'for ... in'について良いページを持っています。それを見てみましょう。 –

関連する問題