如何向JavaScript对象添加键/值对?

如何向JavaScript对象添加键/值对?,javascript,object-literal,Javascript,Object Literal,以下是我的对象文字: var obj = {key1: value1, key2: value2}; 如何将带有value3的字段key3添加到对象中?您可以使用其中任何一个(前提是key3是您要使用的实际键) 或 如果key3是一个变量,则应执行以下操作: var key3 = 'a_key'; var value3 = 3; arr[ key3 ] = value3; 在此之后,请求arr.a_键将返回value3的值,一个文本3有两种方法向对象添加新的属性: var obj = {

以下是我的对象文字:

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

如何将带有
value3
的字段
key3
添加到对象中?

您可以使用其中任何一个(前提是key3是您要使用的实际键)

如果key3是一个变量,则应执行以下操作:

var key3 = 'a_key';
var value3 = 3;
arr[ key3 ] = value3;

在此之后,请求
arr.a_键
将返回
value3
的值,一个文本
3

有两种方法向对象添加新的属性

var obj = {
    key1: value1,
    key2: value2
};
使用点表示法: 使用方括号表示法: 当您知道属性的名称时,将使用第一种形式。当动态确定属性的名称时,使用第二种形式。如本例所示:

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

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

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

数组文字表示法: 数组构造函数表示法: 因为您的arr不是真正的数组。。。这是一个原型物体。真正的阵列是:

var arr = [{key1: value1}, {key2: value2}];
但这仍然不对。实际上应该是:

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

您的示例显示的是对象,而不是数组。在这种情况下,将字段添加到对象的首选方法是只指定给它,如下所示:

arr.key3 = value3;

您可以这样添加它:

arr['key3'] = value3;
arr.key3 = value3;
var obj = {key1: value1, key2: value2};
obj.push( "key3", "value3" );
或者这样:

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

建议使用变量
key3
键入对象的答案仅在
key3
的值为
'key3'
时有效。如果对象中有多个匿名对象文本,并且希望添加另一个包含键/值对的对象,请执行以下操作:

Firebug'对象:

console.log(Comicbook);
if (typeof Comicbook[3]=='undefined') {
    private_formArray[3] = new Object();
    private_formArray[3]["name"] = "Peanuts";
    private_formArray[3]["value"] = "12";
}
返回:

[Object{name=“Spiderman”,value=“11”},Object{name=“Marsipulami”, value=“18”},对象{name=“Garfield”,value=“2”}]

代码:

console.log(Comicbook);
if (typeof Comicbook[3]=='undefined') {
    private_formArray[3] = new Object();
    private_formArray[3]["name"] = "Peanuts";
    private_formArray[3]["value"] = "12";
}

将把
对象{name=“Peanuts”,value=“12”}
添加到Comicbook对象

我知道已经有了一个公认的答案,但我想我会把我的想法记录在某个地方。请[人们]自由地在这个想法上戳洞,因为我不确定这是否是最好的解决方案。。。但我几分钟前刚刚把这些放在一起:

Object.prototype.push = function( key, value ){
   this[ key ] = value;
   return this;
}
您可以这样使用它:

arr['key3'] = value3;
arr.key3 = value3;
var obj = {key1: value1, key2: value2};
obj.push( "key3", "value3" );
因为,原型函数正在返回
您可以继续将
.push
链接到
obj
变量的末尾:
obj.push(…).push(…).push(…)

另一个特性是,可以在push函数参数中传递数组或其他对象作为值。请参阅my fiddle以了解工作示例:

根据ECMA-262(,P67)中定义的属性访问器,有两种方法可以将属性添加到现有对象。所有这两种方式,Javascript引擎都会对它们一视同仁

第一种方法是使用点表示法:

obj.key3=value3;
但这样,您应该在点符号之后使用IdentifierName

var employees = []; 
employees.push({id:100,name:'Yashwant',age:30});
employees.push({id:200,name:'Mahesh',age:35});
第二种方法是使用括号表示法:

obj[“key3”]=value3;
另一种形式:

var key3=“key3”;
obj[key3]=值3;

这样,您就可以使用括号表示法中的表达式(包括IdentifierName)。

您可以创建一个答案为

var employees = []; 
employees.push({id:100,name:'Yashwant',age:30});
employees.push({id:200,name:'Mahesh',age:35});
使用最后一个类创建新对象:

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新手,欢迎评论。适合我。

我越来越喜欢写大型项目

通过
obj['key']
obj.key
添加都是可靠的纯JavaScript答案。但是,通常在使用对象和数组时,LoDash和下划线库都提供了许多额外的方便函数

,不适合

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

(仅限洛达斯) 第二个对象将覆盖或添加到基础对象。
未定义的
值不会被复制

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"} 
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"}
第二个对象将覆盖或添加到基础对象。
未定义的
将被复制

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 = {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}
第二个对象包含默认值,如果它们不存在,将添加到基本对象。
如果密钥已存在,将复制未定义的值

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,它的功能类似于q.merge,如果您已经在使用jQuery,它可能是一个更好的选择

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

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"} 
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"}
值得一提的是ES6/ES2015 Object.assign,它的功能类似于u.merge,如果您已经在使用ES6/ES2015 polyfill,那么它可能是最好的选择

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

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 = {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}

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

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

var obj={key1:'value1',key2:'value2'};
$('#ini').append(JSON.stringify(obj));
$.extend(obj,{key3:'value3'});
$('#ext').append(JSON.stringify(obj))

首字母:


Extended:

为了将一个键值对预先添加到一个对象中,以便中的与该元素一起工作,请首先执行以下操作:

    var nwrow = {'newkey': 'value' };
    for(var column in row){
        nwrow[column] = row[column];
    }
    row = nwrow;

大多数答案中已经提到的两种最常用的方法

obj.key3 = "value3";

obj["key3"] = "value3";
定义属性的另一种方法是使用Object.defineProperty()

当您希望在定义属性时拥有更多控制时,此方法非常有用。
定义的属性可以由用户设置为可枚举、可配置和可写。

我们也可以这样做

var myMap = new Map();
myMap.set(0, 'my value1');
myMap.set(1, 'my value2');
 for (var [key, value] of myMap) {
  console.log(key + ' = ' + value);
 }
2017年答案:
Object.assign()
合并对象

它覆盖
dest<
let my_object = {};

// now i want to add something in it  

my_object.red = "this is red color";

// { red : "this is red color"}
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"} }
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" 
//            }   
//       }