gpt4 book ai didi

javascript - 计算数组中的空值

转载 作者:数据小太阳 更新时间:2023-10-29 04:00:05 24 4
gpt4 key购买 nike

给定一个数组:

var arr = [1,,2,5,6,,4,5,6,,];

计算有多少个值:(长度-删除空值后的长度)

var empties = arr.length - arr.filter(function(x){ return true }).length;

// return 3

或者类似的东西

arr.empties = arr.length;
arr.forEach(function(x){ arr.empties-- });

// arr.empties returns 3

这是最好的方法还是我遗漏了什么?

最佳答案

根据您对另一个答案的评论,您似乎在寻找最短的方法。那么,您可能需要考虑您自己示例的变体:

var empties = arr.length - arr.filter(String).length;

您所做的只是传递 native 函数而不是匿名函数,从而节省一些宝贵的字节。只要不返回 bool 值,任何 native 构造函数或函数都可以。


您需要更具体地说明您认为的“最佳方式”。例如,有些方法会比其他方法提供更好的性能,有些更简洁,有些具有更好的兼容性。

您在帖子中提到的解决方案要求浏览器与 ECMAScript 第 5 版规范兼容,因此它们无法在某些较旧的浏览器(阅读:IE8 及更低版本)中运行。

“最佳”全面方法是一个简单的循环。它不像你的方法那么简洁,但它无疑是最快和最兼容的:

var arr = [1,,2,5,6,,4,5,6,,], count = 0, i = arr.length;

while (i--) {
if (typeof arr[i] === "undefined")
count++;
}

这利用了循环优化(使用 while 和递减比 for 更快)。

另一种方法是对数组进行排序,使 undefined 项都在末尾,并使用循环向后迭代:

var arr = [1,,2,5,6,,4,5,6,,], count = 0;
arr.sort();
while (typeof arr.pop() === "undefined") count++;

alert(count);
//-> 3

这种方法会修改原始数组并删除那些可能不是您想要的项目。但是,它可能在非常大的阵列上要快得多。

Performance test suite
http://jsperf.com/count-undefined-array-elements

关于javascript - 计算数组中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6265940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com