这是我的对象文字:
var obj = {key1: value1, key2: value2};
如何将值为3的字段key3添加到对象中?
这是我的对象文字:
var obj = {key1: value1, key2: value2};
如何将值为3的字段key3添加到对象中?
当前回答
您可以使用其中一个(前提是key3是您想要使用的实际键)
arr[ 'key3' ] = value3;
or
arr.key3 = value3;
如果key3是变量,则应执行以下操作:
var key3 = 'a_key';
var value3 = 3;
arr[ key3 ] = value3;
之后,请求arr.a_key将返回值3,即文本3。
其他回答
因为这是过去的问题,而现在的问题。会建议另外一个解决方案:只需将键和值传递给函数,您将获得一个map对象。
var map = {};
function addValueToMap(key, value) {
map[key] = map[key] || [];
map[key].push(value);
}
表演
今天2020.01.14,我在Chrome v78.0.0、Safari v13.0.4和Firefox v71.0.0上对MacOs HighSierra 10.13.6进行了测试,以获得选定的解决方案。我将解分为可变的(第一个字母M)和不可变的(第二个字母I)。我还提供了一些不可变的解决方案(IB、IC、ID/IE),这些解决方案尚未在回答这个问题时发布
结论
最快的可变解决方案比最快的不可变解决方案快得多(>10倍)像obj.key3=“abc”(MA,MB)这样的经典可变方法是最快的对于不可变的解决方案,{…obj,key3:'abc'}和Object.assign(IA,IB)是最快的令人惊讶的是,对于chrome(MC-IA)和safari(MD-IB),存在比某些可变解决方案更快的不可变解决方案
细节
在下面的片段中,有经过测试的解决方案,您可以在这里从您的机器上进行测试(2022年更新:我向Josh DeLong表示感谢,他从jspref.com重写了测试,jsbench.me停止工作)变量o={key1:真,键2:3,};var log=(s,f)=>console.log(`${s}-->${JSON.stringify(f({…o}))}`);函数MA(obj){obj.key3=“abc”;返回obj;}函数MB(obj){obj['key3']=“abc”;返回obj;}函数MC(obj){Object.assign(obj,{key3:'abc'});返回obj;}函数MD(obj){Object.defineProperty(obj,'key3'{value:“abc”,//默认情况下未定义enumerable:true,//默认为false可配置:true,//默认为false可写:默认为true//false});返回obj;}函数IA(obj){return{…obj,key3:'abc'};}函数IB(obj){return Object.assign({key3:'abc'},obj);}函数IC(obj){let ob=JSON.parse(JSON.stringify(obj))ob.key3=“abc”;返回ob;}函数ID(obj){let ob=Object.fromEntries(Object.entries(obj));ob.key3=“abc”;返回ob;}函数IE(obj){return Object.fromEntries(Object.entries(obj).contat([['key3','abc']]))}日志('MA',MA);日志('MB',MB);日志('MC',MC);日志('MD',MD);日志(‘IA’,IA);日志('IB',IB);日志('IC',IC);日志('ID',ID);日志('IE',IE);此代码段仅显示代码-它本身不执行测试!
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>
有两种方法可以向对象添加新的财产:
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"
// }
// }