我在控制台日志上打印了以下对象:
我假设这是一个包含两个对象的数组(分别为1和2)。但是我想创建一个与对象1和2类似格式的对象,然后将它推送到这个数组,我该怎么做?我试着对此进行推动,但它给了我:
Object #<Object> has no method 'push'
答案 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中,您只需使用点表示法向对象添加任何值。