检查数组是不是包含javascript中的null以外的内容?
Posted
技术标签:
【中文标题】检查数组是不是包含javascript中的null以外的内容?【英文标题】:Check if an array contains something other than null in javascript?检查数组是否包含javascript中的null以外的内容? 【发布时间】:2016-03-06 01:00:27 【问题描述】:我有一个很可能总是看起来像这样的数组:
[null, null, null, null, null]
有时这个数组可能会变成类似这样的东西:
["helloworld", null, null, null, null]
我知道我可以为此使用 for 循环,但有没有办法使用 indexOf
检查数组中是否有不等于 null 的内容。
我正在寻找类似的东西:
var index = indexof(!null);
【问题讨论】:
为什么还要有一个空元素数组?没有迭代(或递归搜索)就没有办法做到这一点,除非你有一台非确定性机器,它总是猜测正确答案,是或否。 好吧,我正在创建一个网站,您可以在其中选择 5 个英雄联盟英雄,如果他们没有选择英雄,那么数组将保持为空。我尝试了for循环方法,但它似乎不起作用 【参考方案1】:使用返回布尔值的some
:
const arr = [null, 2, null, null];
const arr2 = [null, null, null, null];
function otherThanNull(arr)
return arr.some(el => el !== null);
console.log(otherThanNull(arr));
console.log(otherThanNull(arr2));
【讨论】:
【参考方案2】:您可以使用Array.prototype.some
来检查是否有任何元素匹配函数:
var array = [null, null, 2, null];
var hasValue = array.some(function(value)
return value !== null;
);
document.write('Has Value? ' + hasValue);
如果你想要一个非空元素的第一个索引,你将不得不变得有点棘手。首先将每个元素映射到真/假,然后得到indexOf为真:
var array = [null, null, 2, null, 3];
var index = array
.map(function(value) return value !== null )
.indexOf(true);
document.write('Non-Null Index Is: ' + index);
【讨论】:
【参考方案3】:在 Chrome、Safari 和 Firefox 的最新版本(以及其他浏览器的未来版本)中,您可以使用 findIndex()
查找第一个非空元素的索引。
var arr = [null, null, "not null", null];
var first = arr.findIndex(
function(el)
return (el !== null);
);
console.log(first);
(对于其他浏览器,有一个polyfill for findIndex()
)
【讨论】:
注意,没有 IE浏览器支持findIndex
,不仅仅是“旧”浏览器(IE 11仍然被认为是“新”)。
@TbWill4321 是的。但是 polyfill 在那里工作得很好。【参考方案4】:
这样就可以了
var array = ['hello',null,null];
var array2 = [null,null,null];
$.each(array, function(i, v)
if(!(v == null)) alert('Contains data');
)
【讨论】:
【参考方案5】:如果您只想检查数组中是否有任何非falsy valye,请执行
arr.some(el => !!el)
【讨论】:
以上是关于检查数组是不是包含javascript中的null以外的内容?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查一个字符串数组是不是包含 JavaScript 中的一个字符串? [复制]
检查一个数组是不是包含 JavaScript 中另一个数组的任何元素