2013-05-07 27 views
6

Chcę dodać wiele atrybutów do istniejącego obiektu z istniejącymi atrybutami. Czy jest bardziej zwięzły niż jeden wiersz na nowy atrybut?Dodawanie wielu atrybutów do istniejącego obiektu js

myObject.name = 'don'; 
myObject.gender = 'male'; 

Wszystko o MDN pokazuje jak zrobić nowe obiekty notacji wspornika, ale nie istniejących obiektów: Biblioteka https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects

+1

You coul d wykonaj funkcję, która odbiera twój obiekt i obiekt z nowymi rekwizytami/wartościami i wylicza nowy obiekt, aktualizując stary. To będzie trochę bardziej zwięzłe. 'update (obj, {nazwa:" don ", gender:" male "})' –

Odpowiedz

5

Od How can I merge properties of two JavaScript objects dynamically?

var obj2 = {name: 'don', gender: 'male'}; 
for (var attrname in myobject) { myobject[attrname] = obj2[attrname]; } 

EDIT

być nieco jaśniejsze o tym, jak można przedłużyć obiekt, aby korzystać z tej funkcji:

//Extend the protype so you can make calls on the instance 
Object.prototype.merge = function(obj2) { 
    for (var attrname in obj2) { 
     this[attrname] = obj2[attrname]; 
    } 
    //Returning this is optional and certainly up to your implementation. 
    //It allows for nice method chaining. 
    return this; 
}; 
//Append to the object constructor function so you can only make static calls 
Object.merge2 = function(obj1, obj2) { 
    for (var attrname in obj2) { 
     obj1[attrname] = obj2[attrname]; 
    } 
    //Returning obj1 is optional and certainly up to your implementation 
    return obj1; 
}; 

Zastosowanie:

var myObject1 = { One: "One" }; 
myObject1.merge({ Two: "Two" }).merge({ Three: "Three" }); 
//myObject1 is { One: "One", Two: "Two", Three: "Three", merge: function } 


var myObject2 = Object.merge2({ One: "One" }, { Two: "Two" }); 
Object.merge2(myObject2, { Three: "Three" }); 
//myObject2 is { One: "One", Two: "Two", Three: "Three" } 

Uwaga: Na pewno może wdrożyć elastyczną strategię konfliktów scalania w zależności od potrzeb .

3

użyć jQuery

jQuery.extend(myObject, { name : 'don', gender : 'male' }); 
+0

Niestety nie można użyć jQuery. (Jak większość niefortunnych) Chociaż to wygląda super czysto ... –

+0

To pytanie nie zostało otagowane [tag: jQuery]. –

+0

jQuery tylko do rozszerzenia obiektu jest głupie. –

4

Czasami robię to tak:

var props = { 
    name : 'don', 
    gender : 'male', 
    age : 12, 
    other : false 
}; 
for(var p in props) myObject[p] = props[p]; 
2

W ECMAScript 5 można zrobić nam defineProperties:

Object.defineProperties(myobject, { 
    name: { 
    value: 'don' 
    }, 
    gender: { 
    value: 'male' 
    } 
}); 
+0

Niestety, ta składnia jest dość obszerna, co czyni ją jeszcze dłuższą niż oryginalna, którą OP ma nadzieję usprawnić. –

+0

Tak, myślę, że masz rację, to ma więcej zastosowań, gdy chcesz chronić się przed mutacją twoich obiektów. Hehe, zawsze to robię ... = P – JimmyRare

+0

Zgadzam się. To fajna funkcja, po prostu niezgrabna. –

-1

Sposób .push() pracował dla mnie na problem w klasie Uwalnia kod obozie . Nie wiem, czy jest to praktyczne w rzeczywistej aplikacji, ale zdało egzamin. Oto, co było w miejscu:

var myMusic = [ 
    { 
    "artist": "Billy Joel", 
    "title": "Piano Man", 
    "release_year": 1973, 
    "formats": [ 
     "CS", 
     "8T", 
     "LP" ], 
    "gold": true 
    }]; 

Oto co wszedłem:

myMusic.push({ 
    "artist": "Metallica", 
    "title": "Ride the Lightning", 
    "release_year" : 1984, 
    "formats": [ 
     "CS", 
     "8T", 
     "LP" ] 
    } // Add record here 
); 

Oto wynik wyświetlany że:

[ { 
    "artist": "Billy Joel", 
    "title": "Piano Man", 
    "release_year": 1973, 
    "formats": [ 
     "CS", 
     "8T", 
     "LP" ], 
    "gold": true 
    },{ 
    "artist": "Metallica", 
    "title": "Ride the Lightning", 
    "release_year" : 1984, 
    "formats": [ 
     "CS", 
     "8T", 
     "LP" ] 
    }] 
+0

To miało być odpowiedzią.Oryginalny post zapytał, czy istnieje sposób na dodanie wielu rzeczy do istniejącego obiektu naraz. –

+3

czekaj, ale to dodaje dodatkowy obiekt do tablicy. nie to samo. – Julix

3

W ES6/ES2015 można wykorzystać Object.assign method

let obj = {key1: true}; 
console.log('old obj: ', obj); 
let newObj = {key2: false, key3: false}; 

Object.assign(obj, newObj); 
console.log('modified obj: ', obj); 
Powiązane problemy