当您知道属性名称时,将使用第一种形式。 动态确定属性名称时,使用第二种形式。 像这个例子:
var getProperty = function (propertyName) {
return obj[propertyName];
getProperty("key1");
getProperty("key2");
getProperty("key3");
可以使用以下任意一种来构造真实的 JavaScript数组:
数组文字表示法:
var arr = [];
数组构造器符号:
var arr = new Array();
arr.key3 = value3;
因为您的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;
提示使用变量key3
键入对象的答案只有在key3
的值为'key3'
时才有效。
如果您在一个对象中有多个匿名对象文字,并且想要添加另一个包含键/值对的对象,请执行以下操作:
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"}
到漫画对象
我知道已经有一个可以接受的答案,但是我想我已经在某个地方记录了我的想法。 请[人们]随意戳破这个想法,因为我不确定这是否是最佳解决方案...但是我只是在几分钟前将其汇总:
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/
根据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 )。
var employees = [];
employees.push({id:100,name:'Yashwant',age:30});
employees.push({id:200,name:'Mahesh',age:35});
您可以使用@ 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新手,欢迎发表评论。 为我工作。
我越来越喜欢了的LoDash / 下划线写较大的项目时。
通过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"}
此外,值得一提的是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,如果您想自己填充,则最好使用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}
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>
为了前面加上一个键-值对的一个对象,以便在与该元件作品为第一做到这一点:
var nwrow = {'newkey': 'value' };
for(var column in row){
nwrow[column] = row[column];
row = nwrow;
大多数答案中已经提到的两种最常用的方法
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
当您希望在定义属性时拥有更多控制权时,此方法很有用。 用户可以将定义的属性设置为可枚举,可配置和可写。
我们也可以通过这种方式做到这一点。
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()
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"};
糟糕...我被带走了。 从未来走私信息是非法的。 完全模糊!
达到相同效果的最佳方法如下:
function getKey(key) {
return `${key}`;
var obj = {key1: "value1", key2: "value2", [getKey('key3')]: "value3"};
//console.log(obj);
下一个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中。
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 } ]
既然是过去的问题,而是现在的问题。 会建议另一个解决方案:只需将键和值传递给函数,您将获得一个map对象。
var map = {};
function addValueToMap(key, value) {
map[key] = map[key] || [];
map[key].push(value);
只需添加属性:
我们想向该对象添加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之前对其进行操作。
大多数浏览器都支持的,而不是你想添加,如果有它存在的限制都不键值和它不存在,它与附加价值的关键则检查对象键或可用
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"
// }
// }
Android Studio 启动模拟器出现“Timed out after 300seconds waiting for emulator to come online“解决方案
Ram15978:
将NumPy数组转储到csv文件中
InsaneGe:
解决Loadrunner报not writing pre_cci.ci问题
shuaizhuaidym:
我可以强制pip重新安装当前版本吗?
虾米.py: