我有一个像下面的数组
arr=[];
arr[0]={"zero": "apple"};
arr[1]={"one": "orange"};
arr["fancy"]="what?";
但是,即使我能够控制所有值,但在执行console.log(arr.length)
时,我的 length 仍为 2 。
并且在执行console.log(JSON.stringify(arr))时无法获取所有值
这是什么问题。
这是小提琴fiddle
的链接答案 0 :(得分:2)
.length
是Javascript数组中的特殊属性,它被定义为“数组中最大的数字索引加1”(或2^32-1
,以先出现者为准)。顾名思义,它不是“元素数量”。
当您迭代数组时,可以直接使用for..of
或map
,或间接使用例如JSON.stringify
,JS只是循环从0到length - 1
的所有数字,如果该数字下有一个属性,则输出/返回它。它不会考虑其他属性。
答案 1 :(得分:0)
在length
或hashtables
的数组上,associative arrays
属性无法正常工作。此属性仅适用于数字索引数组(和规范化,即无孔)上的期望值。但是存在一种获取associative array
长度的方法,首先必须使用associative array
从Object.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?";
中的错误。