繁体   English   中英

从嵌套数组中获取非空元素的数量

[英]Get number of non-empty elements from nested arrays

我有十个空值的数组

onTable[0 to 10];

["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""]
["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""]
...

我希望获得每个数组的长度没有空值,并且没有创建十个变量来检查。

我已经测试了这个解决方案计算数组中的空值,但我不想让make 10变量。 即: count1, count2,...

我也检查过根据长度比较两个数组:跳过空值但不是我想要的。

如果可能的话,我希望看起来像

onTable[0].length(exclude(""))

制作它的好方法是什么?

使用filterBoolean过滤从子阵列非空元素,并使用length就可以了。

onTable[0].filter(Boolean).length

由于空字符串在JavaScript中是假的,它将从过滤后的数组中删除。

演示:

 var arr = [ ["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""], ["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""] ]; var len = arr[1].filter(Boolean).length; document.write(len); 

使用prototype

 Array.prototype.lengthWihtoutEmptyValues = function () { var initialLength = this.length; var finalLength = initialLength; for (var i = 0; i < initialLength; i++) { if (this[i] == "") { finalLength--; } } return finalLength; } var arrays = [ ["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""], ["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""] ]; var arrayLength = arrays[0].lengthWihtoutEmptyValues(); $("#arrayLength").html(arrayLength); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="arrayLength"></div> 

您可以根据需要使用过滤函数:将值检查为undefinednull等。

 var arr = [ ["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""], ["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""] ]; var len = arr[1].filter(function(x){ return x != ""}).length; document.write(len); 

你应该避免“浪费”记忆并诱导过多的GC。 您可以reduce()每个子数组reduce()到它的非空值的计数:

sub.reduce(function(prev, cur) {
  return prev + (!!cur);
}, 0);

为了处理整个主数组,您可以map()map()到长度:

 var arr = [ ["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""], ["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""], ["Just1", "", ""] ]; var lengths = arr.map(function(sub) { return sub.reduce(function(prev, cur) { return prev + (!!cur); }, 0); }); document.write('[' + lengths.join('], [') + ']'); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM