Добавить несколько атрибутов в существующий объект js
Я хочу добавить несколько атрибутов к существующему объекту с существующими атрибутами. Есть ли более краткий путь, чем одна строка за новый атрибут?
myObject.name = 'don';
myObject.gender = 'male';
Все на MDN показывает, как делать новые объекты с нотной скобкой, но не существующие объекты: https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects
Ответы
Ответ 1
От Как я могу объединить свойства двух объектов JavaScript динамически?
var obj2 = {name: 'don', gender: 'male'};
for (var attrname in myobject) { myobject[attrname] = obj2[attrname]; }
ИЗМЕНИТЬ
Чтобы быть более понятным о том, как можно расширить объект для использования этой функции:
//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;
};
Использование:
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" }
Примечание. Конечно, вы могли бы реализовать гибкую стратегию конфликта слияния в зависимости от ваших потребностей.
Ответ 2
В ES6/ES2015 вы можете использовать метод Object.assign
let obj = {key1: true};
console.log('old obj: ', obj);
let newObj = {key2: false, key3: false};
Object.assign(obj, newObj);
console.log('modified obj: ', obj);
Ответ 3
Иногда я делаю это так:
var props = {
name : 'don',
gender : 'male',
age : 12,
other : false
};
for(var p in props) myObject[p] = props[p];
Ответ 4
Использовать библиотеку jQuery
jQuery.extend(myObject, { name : 'don', gender : 'male' });
Ответ 5
В ECMAscript 5 вы можете сделать нас defineProperties:
Object.defineProperties(myobject, {
name: {
value: 'don'
},
gender: {
value: 'male'
}
});
Ответ 6
Я не уверен, что это полезно, но есть хитрость:
let obj = {a: 1, b: 2};
obj = {...obj, b: 3, c: 4};
console.log(obj); // {a: 1, b: 3, c: 4}
Вы можете попытаться использовать это как-то... В общем, это один вкладыш для добавления или переопределения свойств объекта с помощью метода деструктуризации js.
Ответ 7
Метод .push()
работал у меня по проблеме в классе Free Code Camp. Я не знаю, насколько это практично в реальном приложении, но оно прошло тест.
Вот что было на месте:
var myMusic = [
{
"artist": "Billy Joel",
"title": "Piano Man",
"release_year": 1973,
"formats": [
"CS",
"8T",
"LP" ],
"gold": true
}];
Вот что я ввел:
myMusic.push({
"artist": "Metallica",
"title": "Ride the Lightning",
"release_year" : 1984,
"formats": [
"CS",
"8T",
"LP" ]
} // Add record here
);
Вот результат, который он отобразил:
[ {
"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" ]
}]