如果数组有空值或空值,则清理数组的简单函数,所以如果我们有:
[ '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循环和拼接方法的情况下解决这个问题,但我对如何使用这两个解决它感兴趣。
答案 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
答案 1 :(得分:1)
考虑使用filter
。例如,以下内容将过滤掉null
,undefined
,false
,+0
,-0
,NaN
和""
:
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条件,则可以避免清除数组中的0
,false
或其他值。
答案 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)
alert(
[ 'click1', 'click2', null, '', '', 'submitForm' ].filter(function(x){
return !!x; // or simple `return x;`
})
)
&#13;