检查数组是不是包含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 中的一个字符串? [复制]

检查一个数组是不是包含 JavaScript 中另一个数组的任何元素

检查一个数组是不是包含 JavaScript 中另一个数组的任何元素

检查对象中的值是不是为空或空javascript

如何检查字符串是不是包含 JavaScript 预定义数组中存在的子字符串?