稀疏数组的长度

Pra*_*avi 1 javascript

我有一个数组将采用n值,但值将在不同的时间添加到不同的索引.但是,我需要在特定时间的数组长度.

情况1

var a = [1,2,3,3,4]

a.length //Returns 5 - OK
Run Code Online (Sandbox Code Playgroud)

案例2

var a =[]
a[20] = 2
a.length //Returns 21 but I would like it to return 1
Run Code Online (Sandbox Code Playgroud)

如何获得长度1情况下,2

VLA*_*LAZ 8

许多答案建议循环遍历数组或创建一个新数组然后计算(什么_.compact).我认为所有这些都是错误的方法,因为使用.reduce这使得这完全无关紧要.

var arr = [];

arr[7] = 1;
arr[17] = 2
arr[33] = 0;
arr[9001] = 4

var count = arr.reduce(x => x+1, 0);

console.log(count);
Run Code Online (Sandbox Code Playgroud)

这是一行或19字节的代码.这是因为.reduce遍历数组中的空点去,所以它只能访问明确人口稠密的indeces.然后只计算那些.

请注意,如果您有任何明确设置的indeces undefined,它们仍会按照演示计算填充.因此,如果是这种情况,那么您将需要在回调中考虑它,例如

var arr = [];

arr[17] = 2
arr[42] = undefined

var count = arr.reduce(x => x+1, 0);
console.log(count);

var filteredCount = arr.reduce((x, value) => typeof value !== "undefined" ? x+1 : x, 0);
console.log(filteredCount);
Run Code Online (Sandbox Code Playgroud)