javascript数组清理函数

时间:2015-07-05 18:44:51

标签: javascript arrays splice

如果数组有空值或空值,则清理数组的简单函数,所以如果我们有:

[ 'click1', 'click2', null, '', '', 'submitForm' ]

......它将返回:

[ 'click1', 'click2', 'submitForm' ]

这是我的代码:

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

我有一个for循环检查数组中的每个值和一个if语句来查看它是否等于null或空字符串,如果是这样我使用数组splice方法删除值然后返回干净数组外for循环。

如果您输入的数组没有空字符串或空值,则它会起作用,但是如果我输入[ 1, , 2, 3, 0, -1, 1.1 ],它将返回[1],它不应该这样做。我在这里错过了什么?

PS:我看过其他人如何在没有for循环和拼接方法的情况下解决这个问题,但我对如何使用这两个解决它感兴趣。

5 个答案:

答案 0 :(得分:1)

除了使用mysql> SELECT SALARY, BONUS FROM EMPLOYEE_PAY_TBL; +----------+---------+ | SALARY | BONUS | +----------+---------+ | 30000.00 | 2000.00 | | NULL | NULL | | 40000.00 | NULL | | 20000.00 | 1000.00 | | NULL | NULL | | NULL | NULL | +----------+---------+ mysql> SELECT SALARY + BONUS FROM EMPLOYEE_PAY_TBL; +----------------+ | SALARY + BONUS | +----------------+ | 32000.00 | | NULL | | NULL | | 21000.00 | | NULL | | NULL | +----------------+ 方法之外,您的代码还可以,您还必须在此索引中指定要删除的项目数。

示例:Array.splice(index,numberOfItemsFromIndex);

因此,为了修复您的代码,它应该像以下一样简单:

.splice

Splice Documentation

答案 1 :(得分:1)

考虑使用filter。例如,以下内容将过滤掉nullundefinedfalse+0-0NaN""

arr.filter(Boolean)

答案 2 :(得分:1)

不使用拼接或其他功能,您可以通过另一个数组滑动所有空值,如下所示:

function swipeArray(arr) {
  var newArr = new Array();
  for (var i = 0; i < arr.length; i++) {
    if (arr[i]||arr[i]===0||arr[i]===false)
      newArr.push(arr[i]);
  }
  return newArr;
}

var arr = new Array('click1', 'click2', null, '', '', 'submitForm',0,false);

document.getElementById("out").textContent = JSON.stringify(swipeArray(arr))
<p id="out"></p>

修改:如果延长if​​条件,则可以避免清除数组中的0false或其他值。

答案 3 :(得分:0)

您的代码有两个问题:

  • 您必须将第二个参数传递给splice才能告诉它要删除的项目数
  • 使用splice删除重新索引数组。这意味着当您删除上一个项目时,您将跳过一个项目。你可以向后迭代解决它。
function squeakyClean(arr) {
  for (var i = arr.length-1; i >= 0 ; --i)
    if (arr[i] == null || arr[i] == '')
      arr.splice(i, 1);
  return arr;
}

答案 4 :(得分:0)

&#13;
&#13;
alert(
  [ 'click1', 'click2', null, '', '', 'submitForm' ].filter(function(x){
    return !!x; // or simple `return x;`
  })
)
&#13;
&#13;
&#13;