如何向 JavaScript 对象添加键/值对?
-
19-09-2019 - |
题
这是我的对象文字:
var obj = {key1: value1, key2: value2};
我怎样才能添加 {key3: value3}
到对象?
解决方案
有两种方法来新的属性添加到对象:
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");
A 实可以使用构造JavaScript数组之一:
的阵列的文字符号:
var arr = [];
的Array构造符号:
var arr = new Array();
其他提示
2017年答案: Object.assign()
对象.分配(目标,src1,src2,...) 合并对象。
它会覆盖 dest
具有(无论多少)源对象的属性和值,然后返回 dest
.
这
Object.assign()
方法用于将所有可枚举自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
实例
var obj = {key1: "value1", key2: "value2"};
Object.assign(obj, {key3: "value3"});
document.body.innerHTML = JSON.stringify(obj);
2018年答案:对象扩展运算符 {...}
obj = {...obj, ...pair};
从 MDN:
它将自己的可枚举属性从提供的对象复制到新对象上。
现在可以使用比以下更短的语法进行浅克隆(不包括原型)或对象合并
Object.assign()
.注意
Object.assign()
触发器 设定者 而扩展语法则不然。
实例
它适用于当前的 Chrome 和当前的 Firefox。他们说它在当前的 Edge 中不起作用。
var obj = {key1: "value1", key2: "value2"};
var pair = {key3: "value3"};
obj = {...obj, ...pair};
document.body.innerHTML = JSON.stringify(obj);
2019年答案
对象赋值运算符 +=
:
obj += {key3: "value3"};
哎呀...我刚刚分心了。走私未来信息是非法的。妥妥的遮遮掩掩!
添加方式 obj['key']
或者 obj.key
都是可靠的纯 JavaScript 答案。然而,LoDash 和 Underscore 库在处理一般对象和数组时确实提供了许多额外的方便功能。
.push()
用于数组, , 不是为了 物体.
根据您要寻找的内容,有两个特定的功能可能很好用,并且提供类似于感觉的功能 arr.push()
. 。有关更多信息,请查看文档,他们有一些很棒的示例。
_。合并 (仅限洛达什)
第二个对象将覆盖或添加到基础对象。undefined
值不会被复制。
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}
_.默认值
第二个对象包含默认值,如果它们不存在,则将添加到基础对象中。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"}
$.extend
此外,可能值得一提的是 jQuery.extend,它的功能类似于 _.merge,如果您已经在使用 jQuery,它可能是一个更好的选择。
第二个对象将覆盖或添加到基础对象。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"}
对象.分配()
可能值得一提的是 ES6/ES2015 Object.assign,它的功能与 _.merge 类似,如果您已经在使用 ES6/ES2015 polyfill,那么它可能是最好的选择 巴别塔 如果你想 填充你自己.
第二个对象将覆盖或添加到基础对象。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}
您可以使用这两种(前提KEY3是acutal关键要使用)
arr[ 'key3' ] = value3;
或
arr.key3 = value3;
如果KEY3是一个变量,那么你应该做的:
var key3 = 'a_key';
var value3 = 3;
arr[ key3 ] = value3;
在此之后,请求arr.a_key
将返回value3
的值,一个文字3
。
arr.key3 = value3;
由于您的改编是不是一个真正的数组......这是一个原型对象。真正的阵列将是:
var arr = [{key1: value1}, {key2: value2}];
但它仍然是不正确的。它实际上应该是:
var arr = [{key: key1, value: value1}, {key: key2, value: value2}];
var employees = [];
employees.push({id:100,name:'Yashwant',age:30});
employees.push({id:200,name:'Mahesh',age:35});
我知道已经有这个公认的答案,但我想我的地方记录我的想法。请[人物]随意万佛洞这个想法,因为我不知道这是否是最好的解决办法......但我只是把这个在一起,几分钟前:
Object.prototype.push = function( key, value ){
this[ key ] = value;
return this;
}
您会利用它这种方式:
var obj = {key1: value1, key2: value2};
obj.push( "key3", "value3" );
由于,原型函数返回this
可以继续链.push
对您的obj
变量的末尾:obj.push(...).push(...).push(...);
另一个特征是,可以通过阵列或另一个对象作为在推函数的参数值。见我的拨弄的作业例如: http://jsfiddle.net/7tEme/
可以创建具有的@约努茨G.斯坦
的回答一类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;
- 方括号:
object['prop2'] = 2;
那么我们该使用哪一种呢?
点运算符是更简洁的语法,应该用作默认值(imo)。但是,点运算符无法向对象添加动态键,这在某些情况下非常有用。这是一个例子:
const obj = {
prop1: 1
}
const key = Math.random() > 0.5 ? 'key1' : 'key2';
obj[key] = 'this value has a dynamic key';
console.log(obj);
合并对象:
当我们想要合并两个对象的属性时,以下是最方便的选项:
Object.assign()
, ,将目标对象作为参数,以及一个或多个源对象,并将它们合并在一起。例如:
const object1 = {
a: 1,
b: 2,
};
const object2 = Object.assign({
c: 3,
d: 4
}, object1);
console.log(object2);
- 对象扩展运算符
...
const obj = {
prop1: 1,
prop2: 2
}
const newObj = {
...obj,
prop3: 3,
prop4: 4
}
console.log(newObj);
我们使用哪一个?
- 扩展语法不太冗长,在我看来应该将其用作默认语法。不要忘记将此语法转换为所有浏览器都支持的语法,因为它相对较新。
Object.assign()
更加动态,因为我们可以访问作为参数传入的所有对象,并且可以在将它们分配给新对象之前对其进行操作。
您示例显示了一个对象,而不是阵列。在这种情况下,将字段添加到对象的优选的方法是只分配给它,像这样:
arr.key3 = value3;
在大多数答案已经提到的两种最常用的方法
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
});
当您希望有更多的控制,同时限定属性此方法非常有用。 定义的属性可以被设置为可枚举的,可配置的和可写的用户。
在的情况下你有一个对象内的多个匿名对象文字和想添加含有键/值对另一个对象,操作如下:
<强>萤火虫”对象:强>
console.log(Comicbook);
返回:
[对象名{= “蜘蛛侠”,值= “11”},{对象名称= “Marsipulami”, 值= “18”},{对象名称= “加菲猫”,值= “2”}]
<强>代码:强>
if (typeof Comicbook[3]=='undefined') {
private_formArray[3] = new Object();
private_formArray[3]["name"] = "Peanuts";
private_formArray[3]["value"] = "12";
}
将添加Object {name="Peanuts", value="12"}
到Comicbook对象
无论obj['key3'] = value3
或obj.key3 = value3
将新的对添加到obj
。
不过,我知道jQuery的是没有提及,但如果你使用它,你可以通过添加$.extend(obj,{key3: 'value3'})
对象。 E.g:
var obj = {key1: 'value1', key2: 'value2'};
$('#ini').append(JSON.stringify(obj));
$.extend(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">Initial: </p>
<p id="ext">Extended: </p>
jQuery的。的延伸强>(目标[,object1] [,objectN])合并两个或多个对象一起的内容到所述第一对象。
和它也允许递归增加/具有$.extend(true,object1,object2);
修改:
var object1 = {
apple: 0,
banana: { weight: 52, price: 100 },
cherry: 97
};
var object2 = {
banana: { price: 200 },
durian: 100
};
$("#ini").append(JSON.stringify(object1));
$.extend( 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">Initial: </p>
<p id="ext">Extended: </p>
您可以添加这样说:
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;
但这样,你应该使用 标识符名称 点符号之后。
第二种方法是使用括号表示法:
obj["key3"] = value3;
以及另一种形式:
var key3 = "key3";
obj[key3] = value3;
这样,您可以使用 表达 (包括 标识符名称) 中括号内的符号。
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 } ]
大多数浏览器都支持,它会检查您想要添加的对象键是否可用,如果 可用的 它 覆盖现有的键值 和它 无法使用 它 添加带有值的键
示例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"
// }
// }
我们可以用这种方式也做到这一点。
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 } }
一个更深入的讨论可以在对象传播VS Object.assign 和上找到博士阿克塞尔Rauschmayers网站。
它的工作原理已经在node.js中自发布8.6.0。
维瓦尔第,铬,歌剧和Firefox的最新版本知道这个功能还可以,但Mirosoft不直到今天,无论是在Internet Explorer中也不在边缘。
为了为前置强>一个键 - 值对的一个对象,以便在在强>与该元件的工作原理第一做到这一点:
var nwrow = {'newkey': 'value' };
for(var column in row){
nwrow[column] = row[column];
}
row = nwrow;
下面,以实现同样的最好的方法是指出:
function getKey(key) {
return `${key}`;
}
var obj = {key1: "value1", key2: "value2", [getKey('key3')]: "value3"};
//console.log(obj);
由于其是过去的问题,但存在的问题。建议多了一个解决方案:只要通过键和值的功能,你会得到一个地图对象
var map = {};
function addValueToMap(key, value) {
map[key] = map[key] || [];
map[key].push(value);
}
arr.push({key3: value3});