【问题标题】:Why index gets automatically created in javascript array?为什么索引会在 javascript 数组中自动创建?
【发布时间】:2019-09-02 20:25:48
【问题描述】:

如果我尝试使用 digit 作为属性来创建关联数组,它会自动使用空值插入其他值。

我尝试传递一个字符串 (myArray['myProp']),当时数组长度为零。只有当我传递数字时才会发生这种情况,无论是字符串形式。

const myArray = [];
myArray[5] = 'My value'; // say index is 5 here
console.log(myArray.length); 

我想知道这背后的逻辑是什么。

【问题讨论】:

  • 您的期望是什么?
  • 为什么不使用对象而不是数组?
  • 此处 myArray 的长度应为 '1'...
  • @Mark Meyer,我可以做到,但想知道为什么会这样。任何文档参考都会很棒...
  • 这是数组的默认行为。你期待什么?

标签: javascript arrays object associative-array


【解决方案1】:

那是因为您将值存储到数组中的索引 5。

一个对象最有可能做到这一点?

const obj = {};
obj["5"] = "My value";
// { "5": "My value" }

或者地图?

const myMap = new Map();
myMap.set(5, 'My value');
console.log(myMap.size;) // 1

【讨论】:

  • 如果我这样做,也会发生同样的事情... const index = '5'; myArray[index] = '我的价值';
  • 您正在使用 [] 初始化 myArray,这意味着它创建的是数组数据类型而不是对象。
  • javascript中数组的数据类型是object。
  • @Paveloosha 的行为不一样。如果您希望数组中的长度属性仅返回实际数量的元素,则需要自己完成。尝试迭代元素并检查它是否未定义。
【解决方案2】:

myArray[5] 将尝试查看第 5 个索引,但它不能跳过 0-4,在这种情况下,它们将被 undefined 填充。您可以使用 Object.values 提供除 undefined 以外的任何内容并检查其长度

const myArray = [];
myArray[5] = 'My value'; // say index is 5 here
console.log(myArray);
// get everything except undefined
let newArr = Object.values(myArray)
console.log(newArr.length);

【讨论】:

  • 谢谢你...但如果我们像这样通过 myArray["5"] :) 就不应该发生这种情况 :)
  • 0-4 个索引将是漏洞,而不是 undefined(它在 Stack sn-p 中显示 undefined
  • @adiga,你是对的,但是定义漏洞并从视觉上解释它有点挑战性
猜你喜欢
  • 2013-08-30
  • 2023-03-30
  • 1970-01-01
  • 2021-06-03
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多