如何获得正确的数组长度

时间:2015-09-05 01:23:58

标签: javascript

在我的代码中我初始化数组然后在其中放入一个值为什么输出为0?尽管这应该是1

       var changedfields=[];
       changedfields['product']="productname";
       alert(changedfields.length);

2 个答案:

答案 0 :(得分:0)

你正在创建一个关联数组(普通数组有一个数字索引)但实际上是在尝试构建一个HashMap(一个键,值对)。使用对象或ES6 Maps

我希望以下示例可以帮助您:

var changedfields = {}; // create an object
changedfields['product']="productname";
var keys = Object.keys(changedfields);  // returns the keys of the object ['product']
alert(keys.length);

我建议在javascript中阅读有关数据结构的更多信息,并避免使用关联数组。

答案 1 :(得分:0)

你的问题很有趣。以下是答案。

首先,Javascript中的数组是对象类型。

你写的第一行创建一个空数组,它的类型是object。

var changedfields=[];

您编写的第二行创建了一个名为产品 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等有问题