数组长度在JavaScript中不正确

时间:2018-11-20 19:30:10

标签: javascript node.js

我有一个像下面的数组

  arr=[];
  arr[0]={"zero": "apple"};
  arr[1]={"one": "orange"};
  arr["fancy"]="what?";

但是,即使我能够控制所有值,但在执行console.log(arr.length)时,我的 length 仍为 2 。 并且在执行console.log(JSON.stringify(arr))时无法获取所有值 这是什么问题。

这是小提琴fiddle

的链接

3 个答案:

答案 0 :(得分:2)

.length是Javascript数组中的特殊属性,它被定义为“数组中最大的数字索引加1”(或2^32-1,以先出现者为准)。顾名思义,它不是“元素数量”。

当您迭代数组时,可以直接使用for..ofmap,或间接使用例如JSON.stringify,JS只是循环从0到length - 1的所有数字,如果该数字下有一个属性,则输出/返回它。它不会考虑其他属性。

答案 1 :(得分:0)

lengthhashtables的数组上,associative arrays属性无法正常工作。此属性仅适用于数字索引数组(和规范化,即无孔)上的期望值。但是存在一种获取associative array长度的方法,首先必须使用associative arrayObject.keys(arr)获取密钥列表,然后可以在该列表上使用length属性(即规范化的索引数组)。像下面的例子一样:

arr=[];
arr[0]={"zero": "apple"};
arr[1]={"one": "orange"};
arr["fancy"]="what?";

console.log(Object.keys(arr).length);

关于下一个问题:

  

在执行console.log(JSON.stringify(arr))时无法获取所有值

您的arr元素的格式不正确,不能为 JSON 。如果希望它成为 JSON ,请检查下一个示例的语法:

jsonObj = {};
jsonObj[0] = {"zero": "apple"};
jsonObj[1] = {"one": "orange"};
jsonObj["fancy"] = "what?";

console.log(Object.keys(jsonObj).length);
console.log(JSON.stringify(jsonObj));

答案 2 :(得分:-1)

here关于数组的MDN描述中,“数组不能将字符串用作元素索引(如在关联数组中一样),但必须使用整数。”

换句话说,这不是Javascript数组语法 $rowMax

这会导致arr["fancy"]="what?";中的错误。