-5

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

在此处输入图像描述

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

 Object #<Object> has no method 'push' 
4

2 回答 2

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 - 使用对象以了解有关对象的更多信息。

于 2013-06-11T12:14:08.387 回答
0

Anthony Grist是完全正确的:这不是一个数组。
您可以将其更多地视为哈希数组,您可以在其中使用键访问值。
例如,将数据添加到对象所需要做的就是:

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

在 javascript 中,您可以简单地使用点符号向对象添加任何值。

于 2013-06-11T12:22:23.243 回答