【问题标题】:Check if an array contains something other than null in javascript?检查数组是否包含javascript中的null以外的内容?
【发布时间】:2023-04-07 17:24:01
【问题描述】:

我有一个很可能总是看起来像这样的数组:

[null, null, null, null, null]

有时这个数组可能会变成类似这样的东西:

["helloworld", null, null, null, null]

我知道我可以为此使用 for 循环,但有没有办法使用 indexOf 检查数组中是否有不等于 null 的内容。

我正在寻找类似的东西:

var index = indexof(!null);

【问题讨论】:

  • 为什么还要有一个空元素数组?没有迭代(或递归搜索)就没有办法做到这一点,除非你有一台非确定性机器,它总是猜测正确答案,是或否。
  • 好吧,我正在创建一个网站,您可以在其中选择 5 个英雄联盟英雄,如果他们没有选择英雄,那么数组将保持为空。我尝试了for循环方法,但它似乎不起作用

标签: javascript arrays node.js


【解决方案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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-19
          • 2016-01-26
          • 2019-08-20
          • 1970-01-01
          • 1970-01-01
          • 2021-09-10
          相关资源
          最近更新 更多