【问题标题】:adding an object to an existing javascript/JSON array [closed]将对象添加到现有的 javascript/JSON 数组 [关闭]
【发布时间】:2013-06-11 12:03:37
【问题描述】:

我在控制台日志中打印出以下对象:

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

 Object #<Object> has no method 'push' 

【问题讨论】:

  • 请分享代码...
  • 不是一个数组,它是一个碰巧有“1”和“2”键的对象。
  • 请不要张贴代码图像。
  • @Parse 你想要什么代码?
  • 看看MDN - Working with Objects。但是如果你有数字连续的键,为什么不使用适当的数组而不是对象呢?

标签: javascript jquery json


【解决方案1】:

正如 cmets 中已经提到的,这是一个对象,而不是数组(构造函数是 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 以了解有关对象的更多信息。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多