Javascript数组非未定义元素计数

shi*_*zou 4 javascript arrays

我创建一个数组let arr = new Array(99999),但我不填满它来arr.length99999,我怎么能知道有多少实际的,非undefined元素我有此数组中?

有没有比寻找第一个更好的方法undefined

Nin*_*olz 7

您可以使用Array#forEach,跳过稀疏元素.

let array = new Array(99999),
    count = 0;

array[30] = undefined;

array.forEach(_ => count++);

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

同样的 Array#reduce

let array = new Array(99999),
    count = 0;

array[30] = undefined;

count = array.reduce(c => c + 1, 0);

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

对于过滤非稀疏/密集元素,您可以使用为每个元素返回的回调true.

也许这个链接有助于理解稀疏数组的机制:JavaScript:稀疏数组与密集数组.

let array = new Array(99999),
    nonsparsed;

array[30] = undefined;

nonsparsed = array.filter(_ => true);

console.log(nonsparsed);
console.log(nonsparsed.length);
Run Code Online (Sandbox Code Playgroud)


Ron*_*pis 5

筛选数组中项目的最快,最简单的方法是...使用 .filter()函数,仅筛选有效的元素(在您的情况下未定义),然后检查.length结果。 。

function isValid(value) {
  return value != undefined;
}
var arr = [12, undefined, "blabla", ,true, 44];
var filtered = arr.filter(isValid);

console.log(filtered);   // [12, "blabla", true, 44]
Run Code Online (Sandbox Code Playgroud)