【问题标题】:Deleting certain elements from an array in Javascript在Javascript中从数组中删除某些元素
【发布时间】:2015-07-06 05:15:00
【问题描述】:

我正在尝试编写一个程序,该程序将删除数组中的任何零、空字符串、空值或未定义值。但是,当我运行这个数组时:[1,null,2,3,0,-1,1.1],通过下面的代码它返回数组,其中 null 和 0 值仍在数组中。有什么帮助吗?

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

【问题讨论】:

    标签: javascript arrays for-loop logical-operators


    【解决方案1】:

    因为 return arr;,您已将其放在 for 循环中。一旦代码运行完第一个元素,它就会返回并让函数与数组保持原样。

    只需将 return 语句移到 for 循环之外,如下所示:

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

    【讨论】:

      【解决方案2】:

      您需要将 return arr; 移到 for 循环之外。

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

      【讨论】:

        【解决方案3】:

        使用.filter() 和虚假值删除不需要的项目

        function cleanArray(arr) {
            return arr.filter(function (item) {
                return !!item;
                //or return arr[i] !== 0 && arr[i] !== '' && arr[i] !== null && arr[i] !== undefined
            })
        }
        

        【讨论】:

        • 还需要注意的是,这会返回一个新数组,并不会改变现有数组。
        • @Oka 是的...需要再次否定它
        【解决方案4】:

        非常简单,

        arr = arr.filter(function(item) {
            return !!item;
        });
        

        但这会让真值和其他非数值通过

        arr = arr.filter(function(item) {
            return !!item && !isNaN(item);
        });
        

        可能会更好(我自己还没有测试过 - 留给你一些可以尝试的东西)

        【讨论】:

          【解决方案5】:

          你可以使用数组过滤器

          var arr = [1,null,2,3,0,-1,1.1];
          
          var filteredArr = arr.filter(function(i){
              // if in javascript checks for truthy values
              if(i) {
               return i;   
              }
          });
          
          
          console.log(filteredArr); // [1, 2, 3, -1, 1.1]
          

          演示here

          【讨论】:

            【解决方案6】:
              function cleanArray(arr) {
                var i = 0, newArr = [];
            
                for (i; i < arr.length; i++) {
                    if (arr[i]) {
                        newArr.push(arr[i]);          
                    }
            
                }
                return newArr;
            }
            

            这肯定会奏效。希望我对您有所帮助。 小提琴在这里:https://jsfiddle.net/rok_ed/coakcd3L/

            【讨论】:

              猜你喜欢
              • 2013-09-07
              • 1970-01-01
              • 2019-11-09
              • 2020-02-13
              • 1970-01-01
              • 2022-12-26
              • 2021-02-12
              • 2010-09-21
              相关资源
              最近更新 更多