这是我的对象文字:

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

如何将值为3的字段key3添加到对象中?


当前回答

因为这是过去的问题,而现在的问题。会建议另外一个解决方案:只需将键和值传递给函数,您将获得一个map对象。

var map = {};
function addValueToMap(key, value) {
map[key] = map[key] || [];
map[key].push(value);
}

其他回答

因为这是过去的问题,而现在的问题。会建议另外一个解决方案:只需将键和值传递给函数,您将获得一个map对象。

var map = {};
function addValueToMap(key, value) {
map[key] = map[key] || [];
map[key].push(value);
}

下一个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中。

大多数浏览器都支持,它检查对象键是否可用,如果可用,它将覆盖现有的键值,如果不可用,则使用值添加键

示例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" 
//            }   
//       }

如果在一个Object中有多个匿名Object文本,并希望添加另一个包含键/值对的Object,请执行以下操作:

Firebug对象:

console.log(Comicbook);

返回:

[对象{name=“Spiderman”,值=“11”},对象{name=“Marsiplami”,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";
}

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

在编写大型项目时,我越来越喜欢LoDash/Undercore。

通过obj['key']或obj.key添加都是纯JavaScript的可靠答案。然而,在使用对象和数组时,LoDash和Undercore库都提供了许多其他方便的功能。

.push()用于数组,而不是对象。

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

_.mmerge(仅限Lodash)

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

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}

_.默认值

第二个对象包含默认值,如果它们不存在,将添加到基础对象。如果键已经存在,将复制未定义的值。

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可能值得一提,它的功能类似于_.mmerge,如果您已经在使用jQuery,它可能是一个更好的选项。

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

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"}

对象.assign()

可能值得一提的是ES6/ES2015 Object.assign,它的功能类似于_.mmerge,如果您已经在使用像Babel这样的ES6/ES2015polyfill,如果您想自己填充,它可能是最好的选择。

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