将对象添加到现有的javascript / JSON数组中

时间:2013-06-11 12:03:37

标签: javascript jquery json

我在控制台日志上打印了以下对象:

enter image description here

我假设这是一个包含两个对象的数组(分别为1和2)。但是我想创建一个与对象1和2类似格式的对象,然后将它推送到这个数组,我该怎么做?我试着对此进行推动,但它给了我:

 Object #<Object> has no method 'push' 

2 个答案:

答案 0 :(得分:1)

正如评论中已经提到的,这是一个对象,而不是一个数组(构造函数是Object__proto__对象)。

如果你有数字连续的键,最好将对象保存在一个数组中,然后你就能.push一个新的值。

但是,如果这不可能,但您仍想添加具有增加键的新对象,则必须先找到当前最大键。例如:

function get_max_key(obj) {
    return Math.max.apply(Math, Object.keys(obj));
}

obj[get_max_key(obj) + 1] = new_value;

或者你可以计算对象中的值的数量(取决于实际情况和键的值):

function get_number_of_properties(obj) {
    return Object.keys(obj).length;
}

为了避免每次都提取密钥并对其进行处理,您可以将当前长度或最高密钥保存在额外变量中或作为对象的属性。例如,您可以为对象分配length属性,从而使其成为类似数组的对象:

var obj = {
    length: 0
};

优点是您可以将许多(如果不是全部)数组方法应用于该对象。您甚至可以使用Array.prototype.push添加新属性:

[].push.call(obj, new_value);

它将为您更新length属性。

但是,在这种情况下,您可以直接使用数组。


查看MDN - Working with Objects以了解有关对象的更多信息。

答案 1 :(得分:0)

Anthony Grist完全正确:这不是数组。
您可以将其视为hasharray,您可以使用键访问值。
要将数据添加到对象,您只需要执行以下操作:

yourObject.subObjectName = {content:"Your content",created:"2013"};

在javascript中,您只需使用点表示法向对象添加任何值。