这是我的对象文字:

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

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


当前回答

在编写大型项目时,我越来越喜欢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}

其他回答

我们可以通过多种方式向JavaScript对象添加键/值对。。。

案例1:展开对象使用此选项,我们可以同时向对象添加多个key:value。

常量矩形={width:4,height:6};常量立方体={…矩形,长度:7};const cube2={…矩形,长度:7,笔划:2};console.log(“立方体2:”,立方体2);console.log(“Cube:”,立方体);console.log(“矩形:”,矩形);

案例2:使用点符号

var矩形={width:4,height:6};直角长度=7;console.log(矩形);

案例3:使用[平方]符号

var矩形={width:4,height:6};矩形[“长度”]=7;console.log(矩形);

实现这一目标的最佳方式如下:

function getKey(key) {
  return `${key}`;
}

var obj = {key1: "value1", key2: "value2", [getKey('key3')]: "value3"};

//console.log(obj);

在编写大型项目时,我越来越喜欢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}

你可以用@IonuțG.Stan的答案创建一个类

function obj(){
    obj=new Object();
    this.add=function(key,value){
        obj[""+key+""]=value;
    }
    this.obj=obj
}

使用最后一个类创建新对象:

my_obj=new obj();
my_obj.add('key1', 'value1');
my_obj.add('key2', 'value2');
my_obj.add('key3','value3');

打印对象

console.log(my_obj.obj) // Return {key1: "value1", key2: "value2", key3: "value3"} 

打印密钥

console.log(my_obj.obj["key3"]) //Return value3

我是javascript新手,欢迎评论。对我有用。

只需添加财产:

我们想将prop2:2添加到这个对象中,这是最方便的选项:

点运算符:object.prop2=2;方括号:对象['prop2']=2;

那么我们用哪一个呢?

dot运算符的语法更加简洁,应该用作默认值(imo)。但是,点运算符不能向对象添加动态关键点,这在某些情况下非常有用。下面是一个示例:

常量对象={方案1:1}const key=Math.random()>0.5?'key1':'key2';obj[key]=“此值具有动态键”;console.log(obj);

合并对象:

当我们想要合并两个对象的财产时,以下是最方便的选项:

Object.assign(),将目标对象作为参数,以及一个或多个源对象,并将它们合并在一起。例如:

常量对象1={a: 1中,b: 2,};const object2=对象分配({c: 3中,d: 4个},对象1);console.log(对象2);

对象排列运算符。。。

常量对象={prop1:1,第2部分:2}常量newObj={…对象,prop3:3,第4部分:4}console.log(newObj);

我们用哪一个?

扩展语法不那么冗长,应该用作默认的imo。不要忘记将此语法转换为所有浏览器都支持的语法,因为它相对较新。Object.assign()更加动态,因为我们可以访问作为参数传入的所有对象,并且可以在将它们分配给新对象之前对它们进行操作。