[英]Count of “Defined” Array Elements
给出以下数组:
var arr = [undefined, undefined, 2, 5, undefined, undefined];
我想获得其定义元素的个数(即:那些不 undefined
)。 除了遍历数组之外,还有一个很好的方法吗?
数组length
不是数组中元素的数量,它是最高index + 1
。 仅当连续索引中存在有效元素时, length
属性才会报告正确的元素计数。
var a = [];
a[23] = 'foo';
a.length; // 24
这样说,没有使用任何形式的循环就无法从计数中排除未定义的元素。
不,知道有多少元素未定义的唯一方法是循环并计算它们。 这并不意味着你必须编写循环,只是某些东西,某处必须这样做。 (参见下面的#3,为什么我添加了这个警告。)
你如何循环并计算它们取决于你。 有很多方法:
for
从循环0
到arr.length - 1
(含)。 for..in
循环中,您可以采取正确的安全措施 。 some
, filter
或reduce
,传递适当的功能。 这很方便,不仅因为您不必显式编写循环,而且因为使用这些功能使JavaScript引擎有机会以各种方式优化内部循环。 (它实际上是否会因引擎而异。) ...但这一切都等于显式地循环,或者(在新数组特征的情况下)隐式地循环。
如果未定义的是隐式的,那么你可以这样做:
var len = 0;
for (var i in arr) { len++ };
如果不明确设置,则undefined是隐式的
//both are a[0] and a[3] are explicit undefined
var arr = [undefined, 1, 2, undefined];
arr[6] = 3;
//now arr[4] and arr[5] are implicit undefined
delete arr[1]
//now arr[1] is implicit undefined
arr[2] = undefined
//now arr[2] is explicit undefined
删除值然后检查(如果需要,删除null检查)
const x = A.filter(item => item !== undefined || item !== null).length
随着Lodash
const x = _.size(_.filter(A, item => !_.isNil(item)))
不幸的是,不,你必须经历一个循环并计算它们。
编辑:
var arrLength = arr.filter(Number); alert(arrLength);
在所有浏览器中循环和计数:
var cnt = 0;
for (var i = 0; i < arr.length; i++) {
if (arr[i] !== undefined) {
++cnt;
}
}
在现代浏览器中:
var cnt = 0;
arr.foreach(function(val) {
if (val !== undefined) { ++cnt; }
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.