将多个属性添加到现有的js对象

将多个属性添加到现有的js对象

问题描述:

我想向具有现有属性的现有对象添加多个属性。每个新属性有一个比每行更简洁的方式吗?在MDN将多个属性添加到现有的js对象

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

一切都显示了如何做括号来新的对象,而不是现有对象:https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects

+1

You coul d创建一个接收对象和新对象的函数,枚举新对象,更新旧对象。这会更简洁一点。 'update(obj,{name:“don”,gender:“male”})' – 2013-05-07 19:49:56

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]; } 

编辑

要了解如何可以扩展对象使用此功能更清楚一点:

//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" } 

注意:您当然可以根据您的需要实行灵活的合并冲突策略。

使用jQuery库

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

不幸的是不能使用jQuery。 (像主要不幸)虽然这看起来超级干净... – 2013-05-07 19:50:27

+0

这个问题没有标签[标签:jQuery]。 – 2013-05-07 19:50:31

+0

仅仅用于扩展对象的jQuery是愚蠢的。 – 2013-05-07 19:50:35

有时候,我不喜欢这样写道:

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

在ECMAScript中5就可以使我们的defineProperties

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

不幸的是,语法非常冗长,甚至比OP希望精简的原始语言更长。 – 2013-05-07 19:55:21

+0

是的,我想你是对的,当你想防止你的对象发生变异时,这有更多的用处。 嘿嘿,我总是这么做... = P – JimmyRare 2013-05-07 19:57:52

+0

我同意。这是一个很好的功能,只是笨重。 – 2013-05-07 19:59:13

.push()方法为我工作在一个*编码营类问题。我不知道这在实际应用中是否可行,但它通过了测试。 这里是很到位:

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" ] 
    }] 
+0

这意味着作为一个答案。原始帖子询问是否有办法一次向现有对象添加多个事物。 – 2016-07-13 20:34:13

+3

等待,但这是一个额外的对象添加到数组。不是一回事。 – Julix 2016-12-08 00:45:33

在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);