我有一个数组将采用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?
许多答案建议循环遍历数组或创建一个新数组然后计算(什么_.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)
| 归档时间: |
|
| 查看次数: |
926 次 |
| 最近记录: |