【问题标题】:Javascript associative array does not support Array.prototype.map function [duplicate]Javascript关联数组不支持Array.prototype.map函数[重复]
【发布时间】:2018-11-07 00:04:35
【问题描述】:

经过长时间的编程,我不知道为什么从来没有见过这个:

var array = [];
array['one'] = 1;

console.log(array.length);

这是一个显示 array.length 为零 (0) 的小提琴:
https://jsfiddle.net/0c9v5txe/1/

当然,我不需要数组的长度,只是当length 为零时array.map 不起作用。

真的没有办法在添加新项目时强制 Javascript 更新关联数组的 length 吗?

【问题讨论】:

  • 长度等于最大数字索引 + 1
  • 数组中的索引是基于整数的。
  • length 返回数组元素的数量,而不是对象的任何属性的数量。您所做的是向对象添加了任意属性,这当然不被视为数组元素。请尝试使用数字索引。

标签: javascript arrays


【解决方案1】:

JavaScript 没有称为“关联数组”的功能。

它有对象,而数组是一种旨在保存数字索引值的对象。 (数组上的length 属性是根据编号最高的数字属性计算的)。

(由于数组是一种对象,您可以在其上存储任意属性,但这不是一个好习惯)。

如果要存储命名属性,请不要使用数组。使用普通对象或Map。它们的用途与其他语言中的关联数组相同。

您可以通过将对象的枚举属性提取到数组中然后检查其长度来计算对象的枚举属性。

var myObject = {};
myObject.one = 1;
console.log(Object.keys(myObject).length);

【讨论】:

    【解决方案2】:

    你需要传递索引,而不是值 数组[索引] = 值;

    var array = [];
    array[0] = "one";
    
    console.log(array.length)

    【讨论】:

      猜你喜欢
      • 2012-03-19
      • 2011-06-26
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 2020-03-07
      相关资源
      最近更新 更多