数组长度返回0

时间:2014-01-25 22:08:07

标签: javascript arrays

任何人都可以帮忙解释为什么长度返回0?非常感谢你提前!

var errors = [];
errors[''] = "Monday Morning slot already taken. Would you like to replace it?";
console.log(errors);
document.write(errors.length);

5 个答案:

答案 0 :(得分:19)

只有数字索引会影响数组的.length

允许使用其他命名属性,但它们不是Array对象的典型用法。通过使用"",您将在对象上创建非数字属性。您可以像这样访问它:

errors[""];

但是你不能用典型的Array方法来实现它。


对于命名属性,通常使用Object。无论哪种方式,您都可以使用Object.keys()计算自己的可枚举属性(包括数字索引)的数量。

Object.keys(errors).length;

答案 1 :(得分:7)

因为这不是你添加项目的方式,因为Arrays只接受数字键。你这样做:

errors.push("blah");  /*or*/  errors[0] = "blah";

//Now if you check the length:
errors.length;  //1

此外,如果您将其用作对象,'' 也不是有效名称

*更正:看起来您可以使用""(空字符串)作为键。

答案 2 :(得分:2)

您的数组需要数字输入,您当前使用空字符串作为索引,这是无效的。

您可以指定索引,使用给定元素初始化Array,或将该项目推送到数组:

// Option 1: Specify index
var errors = [];
errors[0] = 'Monday Morning slot already taken. Would you like to replace it?';

// Options 2: Initialise the Array with values
var errors = ['Monday Morning slot already taken. Would you like to replace it?'];

// Option 3: Push the item to Array
var errors = [];
var myString = 'Monday Morning slot already taken. Would you like to replace it?';
errors.push(myString);

答案 3 :(得分:0)

当您使用字符串键而不是int时,JavaScript会将您的数组视为存储键/值对的对象。

如@cookiemonster所述,您可以使用Object.keys(errors).length;获得长度。

此外,您可以考虑使用JavaScript ES6 Map

var errormap = new Map();
errormap.set('err101', 'Description for error 101');
errormap.set('err101', 'Description for error 101');

要获取基于错误密钥的错误描述的描述,

console.log(errormap.get('err101'));

您只需编写以下内容即可获取Map对象的长度:

console.log(errormap.size);

答案 4 :(得分:0)

任何数组的索引都从零开始,当您尝试获取特定索引处的值或更改特定索引的值时,您将索引指定为整数,该整数总是从方括号内的零开始。< /p>

例如

let errors = [] // 创建一个空数组的新实例。

//向数组中添加item有两种方式;

  1. erros.push(添加任何你喜欢的值)
  2. errors[0] = '添加您喜欢的任何值'

将项目添加到数组的两种方法都会将项目添加到零处。

为了让您的代码正常工作,请在 [] 内使用整数而不是字符串。我希望你明白要点。