2012-02-26 22 views
10

Mam strukturę jak poniżej:Aktualizacja właściwości obiektu javascript?

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

zastanawiałem się jak bym zaktualizować te wartości? to znaczy, że następujące poprawne jest:

ale jest źle? Jak mogę to naprawić?

+4

MDN ma wielką samouczek JavaScript, zwłaszcza https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects –

Odpowiedz

15

Jeśli chcesz wymieszać obiekt na inny, możesz użyć funkcji głębokiego rozszerzenia jQuery. "Głębokie" oznacza, że ​​nie zastępuje on name nowym obiektem, ale raczej zastępuje właściwości wewnątrz takiego obiektu.

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

Teraz, skillet.person ma odpowiednie właściwości zaktualizowane, a pozostałe właściwości są nietknięte.

+0

tak! wielkie dzięki :) tego właśnie szukałem – Andy

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

lub

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

dzięki za odpowiedź. czy istnieje szybszy sposób aktualizacji zamiast wyświetlania każdej wartości, jeśli nie chcę zastąpić właściwości, jeśli nie wszystkie wartości są dostępne? – Andy

+1

@Andy: Być może szukasz funkcji 'extend'. [Zobacz Underscore.js dla implementacji.] (Http://documentcloud.github.com/underscore/#extend) – pimvdb

+0

@pimvdb - tak, w tej chwili mam stos właściwości, ale nie wszystkie zawierają wartości. Zastąpiłem obiekt tylko częściowymi właściwościami i spowodował on problem - czy to znaczy, że muszę podać każdą wartość, jaką zrobił MrE, czy istnieje szybszy sposób bez zastępowania? – Andy

4

push to metoda Array s, który dodaje nowy element do tablicy.

Jeśli chcesz zastąpić wartość następnie:

skillet.person.name = { … }; 

Jeśli chcesz przechowywać wiele (pełne) Nazwy w obiekcie, a następnie trzeba właściwość trzymać tablicę obiektów zamiast pojedynczy obiekt.

+0

dziękuję, czy istnieje szybszy sposób aktualizacji zamiast wyświetlania każdej wartości, jeśli nie chcę jej zastąpić? – Andy

+2

@Andy: Możesz iterować po właściwościach obiektu. 'for (var prop in newValues) {oldValues ​​[prop] = newValues ​​[prop];}' (w znaczeniu). MDN ma również dobrą stronę o 'for ... in'. Spójrz na to. –

Powiązane problemy