Javascript 从JS数组中删除不同的项

Javascript 从JS数组中删除不同的项,javascript,arrays,Javascript,Arrays,我试图解决一个练习,其中我需要创建函数cleanArray并从数组中删除各种项。这是我能做到的 function cleanArray(arr) { for (var i = 0; i < arr.length; i++) { if (arr[i] === null || 0 || "" || false || undefined) { arr.splice(i, 1); return arr

我试图解决一个练习,其中我需要创建函数cleanArray并从数组中删除各种项。这是我能做到的

function cleanArray(arr) {
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] === null || 0 || "" || false || undefined) {
            arr.splice(i, 1);
            return arr
        }
    }
}
函数清除数组(arr){
对于(变量i=0;i
但这只会为我过滤掉
null
。我曾尝试将要删除的项放在单独的数组中或逐个删除,但它要么返回
undefined
,要么仅过滤掉0,即使它不是第一个要删除的项


我见过其他答案,人们使用
过滤器
索引
,但我想看看是否有办法使用
拼接
。这里不能使用逻辑运算符吗?

这不是进行多重比较的方式。您的if条件可以写为:

arr[i] === null || 0 === 1 || "" === 1 || false === 1 || undefined === 1
现在很清楚为什么它不起作用了,对吧?您需要将
arr[i]
与以下每个值进行比较:

function cleanArray(arr) {
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] === null || arr[i] === 0 || arr[i] === "" || arr[i] === false || arr[i] === undefined) {
      arr.splice(i, 1);
      return arr
    }
  }
}

您可以通过两个简单的步骤来简化此过程

  • 创建一个函数来验证原语值是否为falsy
  • 使用筛选器或缩减器将这些值与源数组隔离
  • 例如:

    const数组=[1,2,”,null,未定义,3,“4”,true,5,false,6”]
    常量isFalsy=值=>!!值===false
    //这只是为了让代码更具可读性
    常量Istruly=value=>!isFalsy(值)
    consttrullyvalues=array.reduce((a,c)=>isFalsy(c)?a:[…a,c],])
    //将从上面返回相同的
    常量filteredtrullyvalues=array.filter(Istruly)
    
    这就足够了:

    if (!arr[i]) {
      arr.splice(i, 1);
      return arr
    }
    

    因为
    null | | 0 | | | | | | | false | | | undefined
    的计算结果为false。

    每次进行不同检查时都必须进行比较:您应该将其理解为:“如果
    arr[i]==null
    ,或
    arr[i]==0
    …或
    arr[i]==undefined
    ;在所有这些情况下都要执行此操作……”,但是无条件返回仍然是一个问题。您可以用
    arr.filter(布尔值)
    替换整个代码。更好的目标:。@azibom你的目标是什么?请看,“我想看看有没有办法用拼接”为什么<代码>拼接
    适用于索引中的更改,它会改变源数组。而且,它更复杂,性能更低。再读一遍你的问题,然后试着先用简单的方法解决。在实际情况中,如果使用
    拼接
    而不是使用
    reduce
    过滤器
    执行筛选操作,则会引入更多问题。
    if (!arr[i]) {
      arr.splice(i, 1);
      return arr
    }