这是我的对象文字:
var obj = {key1: value1, key2: value2};
如何将值为3的字段key3添加到对象中?
这是我的对象文字:
var obj = {key1: value1, key2: value2};
如何将值为3的字段key3添加到对象中?
当前回答
大多数答案中已经提到了两种最常用的方法
obj.key3 = "value3";
obj["key3"] = "value3";
定义属性的另一种方法是使用Object.defineProperty()
Object.defineProperty(obj, 'key3', {
value: "value3", // undefined by default
enumerable: true, // false by default
configurable: true, // false by default
writable: true // false by default
});
当您希望在定义属性时拥有更多控制权时,此方法非常有用。用户可以将定义的属性设置为可枚举、可配置和可写。
其他回答
我们也可以这样做。
var myMap = new Map();
myMap.set(0, 'my value1');
myMap.set(1, 'my value2');
for (var [key, value] of myMap) {
console.log(key + ' = ' + value);
}
var arrOfObj = [{name: 'eve'},{name:'john'},{name:'jane'}];
var injectObj = {isActive:true, timestamp:new Date()};
// function to inject key values in all object of json array
function injectKeyValueInArray (array, keyValues){
return new Promise((resolve, reject) => {
if (!array.length)
return resolve(array);
array.forEach((object) => {
for (let key in keyValues) {
object[key] = keyValues[key]
}
});
resolve(array);
})
};
//call function to inject json key value in all array object
injectKeyValueInArray(arrOfObj,injectObj).then((newArrOfObj)=>{
console.log(newArrOfObj);
});
输出如下:-
[ { name: 'eve',
isActive: true,
timestamp: 2017-12-16T16:03:53.083Z },
{ name: 'john',
isActive: true,
timestamp: 2017-12-16T16:03:53.083Z },
{ name: 'jane',
isActive: true,
timestamp: 2017-12-16T16:03:53.083Z } ]
我知道这个问题已经有了一个公认的答案,但我想我应该在某个地方记录我的想法。请[人们]自由地戳破这个想法,因为我不确定这是否是最好的解决方案。。。但我几分钟前刚刚把这件事放在一起:
Object.prototype.push = function( key, value ){
this[ key ] = value;
return this;
}
您可以这样使用它:
var obj = {key1: value1, key2: value2};
obj.push( "key3", "value3" );
由于原型函数正在返回此值,因此您可以继续将.push链接到obj变量的末尾:obj.push(…).push(……).press(…);
另一个特性是可以将数组或另一个对象作为push函数参数中的值传递。请参见我的小提琴,以获得一个有效的示例:http://jsfiddle.net/7tEme/
您可以通过以下方式添加:
arr['key3'] = value3;
或者这样:
arr.key3 = value3;
只有当key3的值为“key3”时,建议使用变量key3键入对象的答案才有效。
根据ECMA-262中定义的属性访问器(http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf,P67),有两种方法可以将财产添加到现有对象。通过这两种方式,Javascript引擎将对它们一视同仁。
第一种方法是使用点符号:
obj.key3 = value3;
但是这样,您应该在点符号后使用IdentifierName。
第二种方法是使用括号表示法:
obj["key3"] = value3;
以及另一种形式:
var key3 = "key3";
obj[key3] = value3;
这样,您可以在括号符号中使用表达式(包括标识符名称)。