[英]How to get the correct array length
在我的代码中,我初始化数组然后在其中放入一个值为什么输出为 0 ?尽管这应该是 1
var changedfields=[];
changedfields['product']="productname";
alert(changedfields.length);
您正在创建一个关联数组(普通数组有一个数字索引),但实际上是在尝试构建一个 HashMap(一个键值对)。 使用对象或ES6 地图。
我希望下面的例子能帮助你:
var changedfields = {}; // create an object
changedfields['product']="productname";
var keys = Object.keys(changedfields); // returns the keys of the object ['product']
alert(keys.length);
我建议阅读有关 javascript 中数据结构的更多信息,并一般避免使用关联数组。
你的问题很有趣。 以下是答案。
首先,Javascript 中的数组是对象类型。
你写的第一行创建了一个空数组,它的类型是对象。
var changedfields=[];
您编写的第二行创建了一个名为product of changedfields的属性,并将值设置为productname 。 它允许您添加产品属性,因为 Javascript 数组类型是对象。 如果你只有var changedfields; 您无法添加此属性。
changedfields['product']="productname";
您编写的第三行只是查找空数组的长度。
alert(changedfields.length);
在 Javascript 中,关联数组是使用 object 实现的。 但是如果你想在changedfields数组中添加产品名称。 您可以使用如下推送方法并检查长度:
changedfields.push('productname');
console.log(changedfields.length);
Javascript数字索引数组长度
所以Javascript数字索引数组长度可以这样计算:
console.log(array.length);
console.log(changedfields.length); // in your case
Javascript 关联数组长度
Javascript 关联数组(对象)长度可以通过以下方式计算:
选项1:
Object.len = function(obj) {
var objLen = 0;
for (i in obj) {
obj.hasOwnProperty(i) ? objLen++ : '';
}
return objLen;
};
console.log(Object.len(changedfields));
选项 2:
console.log(Object.keys(array).length);
console.log(Object.keys(changedfields).length); // in your case
注意:这与 Internet Explorer 8、Opera 等有关
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.