JavaScript Array.length返回0

时间:2016-03-30 11:17:14

标签: javascript arrays

我的javascript数组看起来像enter image description here

问题是Object.mappings有3个元素在console.log()的控制台中清晰打印,但当我尝试查找数组的长度时,它返回0。我尝试对数组进行字符串化,然后只打印“[]”。

我在这里做错了什么?

3 个答案:

答案 0 :(得分:3)

仅当数组包含与索引关联的元素时,才可以使用length属性。如果它是关联数组,则length属性将返回0.您可以使用以下代码自行计算元素:

function len(arr) {
  var count = 0;
  for (var k in arr) {
    if (arr.hasOwnProperty(k)) {
      count++;
    }
  }
  return count;
}

然后,您可以使用len(mappings)

计算“映射”数组的元素

答案 1 :(得分:2)

JavaScript数组不像PHP那样可以作为关联数组使用。但是,由于JavaScript的动态特性以及Array是Object的子类这一事实,您仍然可以将任意属性附加到Array上。但是length属性不会反映这一点(正如您所发现的那样)。

如果您使用较新的浏览器/ polyfill(如core-js),我建议改为使用MapDocumentation)。否则,使用一个简单的对象({}),并在对象上使用Object.keys来获取密钥。

后来的例子:

var mappings = {};
mappings['foo'] = 'bar';
Object.keys(mappings); // returns ['foo']
mappings[Object.keys(mappings)[0]]; // returns 'bar'

// Loop through all key-value pairs
Object.keys(mappings).forEach(function(key) {
  var value = mappings[key];
  // Do stuff with key and value.
});

答案 2 :(得分:1)

在这篇MDN文章中,数组的length属性表示的数字大于数组中最高索引的整数。

  

length属性表示无符号的32位整数,它始终在数值上大于数组中的最高索引。

当您为数组指定非整数键时,最高索引仍为0

var arr = [];
arr['abc'] = 1;
console.log(arr.length); //0
arr[100] = 2;
console.log(arr.length); //101