这是我的对象文字:

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

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


当前回答

2017年答案:Object.assign()

Object.assign(dest,src1,src2,…)合并对象。

它使用源对象的财产和值(无论多少)覆盖dest,然后返回dest。

assign()方法用于将所有可枚举自身财产的值从一个或多个源对象复制到目标对象。它将返回目标对象。

实时示例

var obj={key1:“value1”,key2:“value2”};对象.assign(obj,{key3:“value3”});document.body.innerHTML=JSON字符串(obj);

2018年答案:对象扩展运算符{…}

obj = {...obj, ...pair, scalar};

来自MDN:

它将自己的可枚举财产从提供的对象复制到新对象上。现在可以使用比Object.assign()更短的语法进行对象的浅层克隆(不包括原型)或合并。注意Object.assign()触发setter,而spread语法不触发setter。

实时示例

它适用于当前的Chrome和Firefox。他们说这在当前的Edge中不起作用。

var obj={key1:“value1”,key2:“value2”};var pair={key3:“value3”};var scalar=“value4”obj={…obj,…对,标量};document.body.innerHTML=JSON字符串(obj);

2019年答案

对象赋值运算符+=:

obj += {key3: "value3"};

哎呀。。。我被迷住了。从未来走私信息是非法的。完全模糊!

其他回答

arr.key3 = value3;

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

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

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

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

有两种方法可以向对象添加新的财产:

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

使用点符号:

obj.key3 = "value3";

使用方括号表示法:

obj["key3"] = "value3";

当您知道属性的名称时,将使用第一种形式。当动态确定属性的名称时,使用第二种形式。如本例所示:

var getProperty = function (propertyName) {
    return obj[propertyName];
};

getProperty("key1");
getProperty("key2");
getProperty("key3");

一个真正的JavaScript数组可以使用以下任一方法构建:

数组文字表示法:

var arr = [];

Array构造函数表示法:

var arr = new Array();

大多数浏览器都支持,它检查对象键是否可用,如果可用,它将覆盖现有的键值,如果不可用,则使用值添加键

示例1

let my_object = {};

// now i want to add something in it  

my_object.red = "this is red color";

// { red : "this is red color"}

示例2

let my_object = { inside_object : { car : "maruti" }}

// now i want to add something inside object of my object 

my_object.inside_object.plane = "JetKing";

// { inside_object : { car : "maruti" , plane : "JetKing"} }

示例3

let my_object = { inside_object : { name : "abhishek" }}

// now i want to add something inside object with new keys birth , gender 

my_object.inside_object.birth = "8 Aug";
my_object.inside_object.gender = "Male";


    // { inside_object : 
//             { name : "abhishek",
//               birth : "8 Aug",
//               gender : "Male" 
//            }   
//       }

在编写大型项目时,我越来越喜欢LoDash/Undercore。

通过obj['key']或obj.key添加都是纯JavaScript的可靠答案。然而,在使用对象和数组时,LoDash和Undercore库都提供了许多其他方便的功能。

.push()用于数组,而不是对象。

根据您正在查找的内容,有两个特定的函数可能很好利用,并提供类似arr.push()的功能。有关更多信息,请查看文档,其中有一些很棒的示例。

_.mmerge(仅限Lodash)

第二个对象将覆盖或添加到基础对象。不复制未定义的值。

var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
_.merge(obj, obj2);
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3"} 

_扩展/分配

第二个对象将覆盖或添加到基础对象。将复制undefined。

var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
_.extend(obj, obj2);
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3", key4: undefined}

_.默认值

第二个对象包含默认值,如果它们不存在,将添加到基础对象。如果键已经存在,将复制未定义的值。

var obj = {key3: "value3", key5: "value5"};
var obj2 = {key1: "value1", key2:"value2", key3: "valueDefault", key4: "valueDefault", key5: undefined};
_.defaults(obj, obj2);
console.log(obj);
// → {key3: "value3", key5: "value5", key1: "value1", key2: "value2", key4: "valueDefault"}

$.扩展

此外,jQuery.extend可能值得一提,它的功能类似于_.mmerge,如果您已经在使用jQuery,它可能是一个更好的选项。

第二个对象将覆盖或添加到基础对象。不复制未定义的值。

var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
$.extend(obj, obj2); 
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3"}

对象.assign()

可能值得一提的是ES6/ES2015 Object.assign,它的功能类似于_.mmerge,如果您已经在使用像Babel这样的ES6/ES2015polyfill,如果您想自己填充,它可能是最好的选择。

第二个对象将覆盖或添加到基础对象。将复制undefined。

var obj = {key1: "value1", key2: "value2"};
var obj2 = {key2:"value4", key3: "value3", key4: undefined};
Object.assign(obj, obj2); 
console.log(obj);
// → {key1: "value1", key2: "value4", key3: "value3", key4: undefined}

根据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;

这样,您可以在括号符号中使用表达式(包括标识符名称)。