如何将键/值对添加到JavaScript对象?
这是我的对象文字:
var obj = {key1: value1, key2: value2};
如何向对象添加{key3: value3}
?
#1楼
您可以使用其中任何一个(提供的key3是您要使用的自动键)
arr[ 'key3' ] = value3;
要么
arr.key3 = value3;
如果key3是变量,则应该执行以下操作:
var key3 = 'a_key';
var value3 = 3;
arr[ key3 ] = value3;
此后,请求arr.a_key
将返回value3
的值,即文字3
。
#2楼
arr.push({key3: value3});
#3楼
有两种向对象添加新属性的方法:
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 = [];
数组构造器符号:
var arr = new Array();
#4楼
arr.key3 = value3;
因为您的arr并不是一个数组...它是一个原型对象。 真正的数组是:
var arr = [{key1: value1}, {key2: value2}];
但是还是不对 实际上应该是:
var arr = [{key: key1, value: value1}, {key: key2, value: value2}];
#5楼
您的示例显示一个对象,而不是数组。 在这种情况下,将字段添加到对象的首选方法是将其分配给对象,如下所示:
arr.key3 = value3;
#6楼
您可以通过以下方式添加它:
arr['key3'] = value3;
或者这样:
arr.key3 = value3;
提示使用变量key3
键入对象的答案只有在key3
的值为'key3'
时才有效。
#7楼
如果您在一个对象中有多个匿名对象文字,并且想要添加另一个包含键/值对的对象,请执行以下操作:
Firebug的对象:
console.log(Comicbook);
返回:
[对象{name =“ Spiderman”,value =“ 11”},对象{name =“ Marsipulami”,value =“ 18”},对象{name =“ Garfield”,value =“ 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"}
到漫画对象
#8楼
我知道已经有一个可以接受的答案,但是我想我已经在某个地方记录了我的想法。 请[人们]随意戳破这个想法,因为我不确定这是否是最佳解决方案...但是我只是在几分钟前将其汇总:
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(...);
另一个功能是,您可以传递一个数组或另一个对象作为push函数参数中的值。 请参阅我的小提琴以获取工作示例: http : //jsfiddle.net/7tEme/
#9楼
根据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;
这样,您可以在方括号表示法中使用Expression (包括IdentifierName )。
#10楼
var employees = [];
employees.push({id:100,name:'Yashwant',age:30});
employees.push({id:200,name:'Mahesh',age:35});
#11楼
您可以使用@ 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新手,欢迎发表评论。 为我工作。
#12楼
我越来越喜欢了的LoDash / 下划线写较大的项目时。
通过obj['key']
或obj.key
进行添加都是纯JavaScript可靠的答案。 但是,通常在处理对象和数组时,LoDash库和Underscore库确实提供了许多其他方便的功能。
.push()
适用于数组 ,不适用于对象 。
根据您要查找的内容,有两个可能很好用的特定函数,它们提供的功能类似于arr.push()
的感觉。 有关更多信息,请检查文档,那里有一些很棒的示例。
_.merge (仅Lodash)
第二个对象将覆盖或添加到基础对象。 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"}
_.extend / _.assign
第二个对象将覆盖或添加到基础对象。 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}
_.defaults
第二个对象包含默认值,如果默认值不存在,这些默认值将添加到基本对象中。 如果键已经存在,则将复制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,它的功能类似于_.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"}
Object.assign()
可能值得一提的是ES6 / ES2015 Object.assign,它的功能类似于_.merge,如果您想自己填充,则最好使用Babel等ES6 / ES2015填充。
第二个对象将覆盖或添加到基础对象。 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}
#13楼
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));
<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的。 扩展 (target [,object1] [,objectN])将两个或更多对象的内容合并到第一个对象中。
并且还允许使用$.extend(true,object1,object2);
进行递归添加/修改$.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>
#14楼
为了前面加上一个键-值对的一个对象,以便在与该元件作品为第一做到这一点:
var nwrow = {'newkey': 'value' };for(var column in row){nwrow[column] = row[column];}row = nwrow;
#15楼
大多数答案中已经提到的两种最常用的方法
obj.key3 = "value3";obj["key3"] = "value3";
定义属性的另一种方法是使用Object.defineProperty()
Object.defineProperty(obj, 'key3', {value: "value3", // undefined by defaultenumerable: true, // false by defaultconfigurable: true, // false by defaultwritable: true // false by default
});
当您希望在定义属性时拥有更多控制权时,此方法很有用。 用户可以将定义的属性设置为可枚举,可配置和可写。
#16楼
我们也可以通过这种方式做到这一点。
var myMap = new Map();
myMap.set(0, 'my value1');
myMap.set(1, 'my value2');for (var [key, value] of myMap) {console.log(key + ' = ' + value);}
#17楼
2017年答案: Object.assign()
Object.assign(dest,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"};
糟糕...我被带走了。 从未来走私信息是非法的。 完全模糊!
#18楼
达到相同效果的最佳方法如下:
function getKey(key) {return `${key}`;
}var obj = {key1: "value1", key2: "value2", [getKey('key3')]: "value3"};//console.log(obj);
#19楼
下一个Javascript规范(候选阶段3)中的一种简短简洁的方法是:
obj = { ... obj, ... { key3 : value3 } }
可以在Object spread vs Object.assign和Axel Rauschmayers博士站点上找到更深入的讨论。
自版本8.6.0起,它已经可以在node.js中使用。
最新版本的Vivaldi,Chrome,Opera和Firefox也知道此功能,但是Mirosoft直到今天才知道,无论是Internet Explorer还是Edge中。
#20楼
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 arrayfunction 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 objectinjectKeyValueInArray(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 } ]
#21楼
既然是过去的问题,而是现在的问题。 会建议另一个解决方案:只需将键和值传递给函数,您将获得一个map对象。
var map = {};
function addValueToMap(key, value) {
map[key] = map[key] || [];
map[key].push(value);
}
#22楼
只需添加属性:
我们想向该对象添加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);
我们使用哪一个?
- 扩展语法不太冗长,应将其用作默认imo。 不要忘记将此语法转换为所有浏览器都支持的语法,因为它相对较新。
Object.assign()
更具动态性,因为我们可以访问作为参数传入的所有对象,并且可以在将它们分配给新Object之前对其进行操作。
#23楼
大多数浏览器都支持的,而不是你想添加,如果有它存在的限制都不键值和它不存在,它与附加价值的关键则检查对象键或可用
例子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"
// }
// }
如何将键/值对添加到JavaScript对象?相关推荐
- python列表中的字典如何添加键值对_在Python中将键值对添加到字典中
Python字典是键值对的无序集合.在本教程中,我们将看到如何将新的键值对添加到已经定义的字典中.以下是我们可以使用的两种方法. 将新键分配为下标 我们通过使用新键作为下标并为其分配值来向字典添加新元 ...
- 将一个键值对添加入一个对象_细品Redis高性能数据结构之hash对象
背景 上一节讲Redis的高性能字符串结构SDS,今天我们来看一下redis的hash对象. Hash对象 简介 redis的hash对象有两种编码(底层实现)方式,字典编码和压缩列表编码.在使用字典 ...
- android修改默认遥控器键值,android 中遥控器键值的添加和修改
前言:TV 上遥控器键值怎么样对应到android的系统中,最近一个客户需要在我们的平台上修改,所以,我顺便做了一下总结,方便以后参考. 请转载的朋友一定加上出处,十分感谢~~ 第一步: init.r ...
- 数组中的键值对去重_javascript利用对象键值对中键的唯一性实现数组去重
/p> "http://www.w3.org/TR/html4/loose.dtd"> var arr = [1,2,3,2,3,4,5,6,7,8,9,8,5]; / ...
- python字典类型实现的键值对的映射_python数据类型-映射和集合-字典
字典是python语言中唯一的映射类型,映射对象里哈希值(键,key)和指向的对象(值,value)是一对多的关系.一个字典对象是可变的,是一个容器类型,可存储任意个数的python对象,其中也可以包 ...
- 检查键是否存在于JavaScript对象中?
如何检查JavaScript对象或数组中是否存在特定键? 如果密钥不存在,而我尝试访问它,它将返回false吗? 还是抛出错误? #1楼 它将返回undefined . var aa = {hello ...
- SLIK: 高扩展、低延时的键值存储索引实现(RAMCloud)
http://www.wzxue.com/slik-ramcloud/ SLIK: 高扩展.低延时的键值存储索引实现(RAMCloud) 2014 年 06 月 01 日 写评论 作者 麦子迈 RAM ...
- 高通驱动实现 GPIO 中断上报键值
高通驱动实现 GPIO 中断上报键值 一. 确认keycode值,同步修改上层键值映射表 Tips 1: 选择一个好的键值的好处 Tips 2: 如何确认驱动代是否ok 二. 驱动代码编写 三.代码调 ...
- c#集合_键值对Dictionary SortedList
前言: 在 C# 中,键值对是一种常见的数据结构,可以使用不同的集合类实现.以下是常用的键值对集合类: Dictionary<TKey, TValue>:一种使用哈希表实现的键值对集合.它 ...
最新文章
- Miller方法产生、检验素数
- hadoop集群中datanode启动几秒钟自动关闭
- python3字符串处理,高效切片
- Tab选项卡切换效果JavaScript汇总
- python订单管理系统软件_有什么订单管理软件系统是好用的?
- CentOS 6.3最小化安装后,有些必备工作才可以正常使用
- Don't be afraid. You are stronger than you think.
- 前端入门 前端实战项目 JS
- 【JavaWeb】(血泪踩雷史...)Token登录前后端交互及跨域问题
- java日志文件采集,日志收集十大技术细节
- IDEA社区版详细安装2022最新版(保姆式)
- 讯飞离线语音合成(语记|语音+)
- 电容降压工作原理简介
- 可以在PowerShell里使用的Word度量单位
- 压缩包设置了解压码忘记了怎么办?
- DellR240服务器U盘引导,【dell uefi u盘引导】dellr730配置uefi引导_dell uefi启动
- 企业如何用InfBox架设自己的内部即时信息IM服务器
- Matplotlib官方文档学习笔记 PART1-简介 C2-pyplot教程 (19-12-4 by-xieyuxin)
- 舆情热点产生的背景及原因
- 51单片机 11.0592MHz 产生115200 波特率
热门文章
- android Intent onNewIntent 什么时候调用
- java 值传递 和 引用传递
- 第六周项目一-分数类的雏形(2)
- Android之Android触摸事件传递机制
- Android之给图片去色,返回灰度图片以及ColorMatrix中setSaturation方法的用法
- android源码中常用的Rect方法
- PINVOKE.NET: Do interop the wiki way!
- oracle 查询、创建、删除 数据库用户
- 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版...
- pyspark 学习 Tips