如何向JavaScript对象添加键/值对?

1961

这是我的对象字面量:

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

如何向对象添加字段key3和值value3


5
好的,JavaScript中关于关联数组的整个问题很奇怪,因为你可以这样做... http://dreaminginjavascript.wordpress.com/2008/06/27/how-weird-are-javascript-arrays/ - Nosredna
2
@Nosredna - 关键是,在JavaScript中没有关联数组这样的东西。在那篇文章中,他将对象属性添加到一个数组对象中,但这些属性并不真正属于“数组”。 - UpTheCreek
2
有没有一种方法可以在对象字面量中使用未来的ES+实现有条件地设置键值对? - Con Antonakos
25个回答

6

如果您在一个对象中有多个匿名对象字面量,并且想要添加另一个包含键/值对的对象,请执行以下操作:

使用Firebug查看该对象:

console.log(Comicbook);

返回:

[对象{name="蜘蛛侠",value="11"},对象{name="Marsipulami", value="18"},对象{name="加菲猫",value="2"}]

代码:

if (typeof Comicbook[3]=='undefined') {
    private_formArray[3] = new Object();
    private_formArray[3]["name"] = "Peanuts";
    private_formArray[3]["value"] = "12";
}

Object {name="花生", value="12"}添加到漫画书对象中


很好地解释了另一个选项,它更适合处理具有id或name属性的对象,然后在添加时进行分配,这是一个不错的选择。特别是当它现在或将来可能具有更多的属性时,同样的方法将适用,只需再加一个逗号,它就可以轻松应对计划的变化。 - Avia Afer

4

无论是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.extend(target[,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>


1

虽然这是一个关于过去的问题,但它仍然存在于现在。建议再提供一种解决方案:只需将键和值传递给函数,您将获得一个映射对象。

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

3
这似乎与所提出的问题毫不相关。 - Quentin

0

实现相同效果的最佳方法如下:

function getKey(key) {
  return `${key}`;
}

var obj = {key1: "value1", key2: "value2", [getKey('key3')]: "value3"};

//console.log(obj);

-1
为了在对象中前置一个键值对,以便首先使用该元素进行for in循环,请执行以下操作:
    var nwrow = {'newkey': 'value' };
    for(var column in row){
        nwrow[column] = row[column];
    }
    row = nwrow;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接