这是我的对象文字:

var obj = {key1: value1, key2: value2};

如何将值为3的字段key3添加到对象中?


当前回答

obj['key3']=value3或obj.key3=value3将向obj添加新对。

然而,我知道没有提到jQuery,但是如果您正在使用它,可以通过$.exextend(obj,{key3:‘value3‘})添加对象。例如。:

var obj={key1:“value1”,key2:“value2”};$(“#ini”).append(JSON.stringify(obj));$.exextend(obj,{key3:“value3”});$('#ext').append(JSON.stringify(obj));<script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js“></script><p id=“ini”>首字母:</p><p id=“ext”>扩展:</p>

extend(target[,object1][,objectN])将两个或多个对象的内容合并到第一个对象中。

它还允许使用$.exextend(true,object1,object2);进行递归添加/修改:

变量对象1={苹果:0,香蕉:{重量:52,价格:100},樱桃:97};变量对象2={香蕉:{价格:200},榴莲:100};$(“#ini”).append(JSON.stringify(object1));$.exextend(true,object1,object2);$(“#ext”).append(JSON.stringify(object1));<script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js“></script><p id=“ini”>首字母:</p><p id=“ext”>扩展:</p>

其他回答

arr.key3 = value3;

因为你的arr不是一个数组。。。这是一个原型对象。真正的数组应该是:

var arr = [{key1: value1}, {key2: value2}];

但这仍然不正确。实际上应该是:

var arr = [{key: key1, value: value1}, {key: key2, value: value2}];

我们也可以这样做。

var myMap = new Map();
myMap.set(0, 'my value1');
myMap.set(1, 'my value2');
 for (var [key, value] of myMap) {
  console.log(key + ' = ' + value);
 }

下一个Javascript规范(候选阶段3)中简短而优雅的方式是:

obj={…obj,…{key3:value3}}

在Object spread vs Object.assign和Axel Rauschmayers博士的网站上可以找到更深入的讨论。

自8.6.0版以来,它已经在node.js中运行。

最新版本的Vivaldi、Chrome、Opera和Firefox也知道这个功能,但Mirosoft直到今天才知道,无论是在Internet Explorer还是Edge中。

可以使用{[key]:value}语法创建新对象:

常量foo={a: '键',b: '值'}常量bar={[foo.a]:foo.b}console.log(bar);//{key:“value”}console.log(bar.key);//价值常量baz={['key2']:'value2'}console.log(baz);//{key2:“value2”}console.log(baz.key2);//值2

使用前面的语法,您现在可以使用扩展语法{…foo,…bar}添加新对象,而不改变旧值:

常量foo={a:1,b:2};常量条={…foo,…{['c']:3}};console.log(bar);//{a:1,b:2,c:3}console.log(bar.c);//3.

因为这是过去的问题,而现在的问题。会建议另外一个解决方案:只需将键和值传递给函数,您将获得一个map对象。

var map = {};
function addValueToMap(key, value) {
map[key] = map[key] || [];
map[key].push(value);
}