我正在尝试编写一个程序,该程序将删除数组中的任何零,空字符串,null或未定义的值。但是当我运行这个数组:[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;
}
}
答案 0 :(得分:3)
因为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;
}
答案 1 :(得分:2)
您需要将#include <iostream>
#include <algorithm>
#include <limits>
using namespace std;
int main(int argc, char ** argv) {
int N = 100;
int * drop = new int[N + 1];
drop[0] = 0;
drop[1] = drop[2] = 1;
for (int i = 3; i <= N; ++i) {
drop[i] = numeric_limits<int>::max(); // <limits>
for(int start = 1; start <= i; ++start)
drop[i] = min(drop[i], max(start, drop[i - start] + 1)); // <algorithm>
}
cout << drop[3] << endl;
return 0;
}
移出for循环。
return arr;
答案 2 :(得分:2)
使用.filter()和falsy值删除不需要的内容
function cleanArray(arr) {
return arr.filter(function (item) {
return !!item;
//or return arr[i] !== 0 && arr[i] !== '' && arr[i] !== null && arr[i] !== undefined
})
}
答案 3 :(得分:1)
非常简单,
arr = arr.filter(function(item) {
return !!item;
});
但是这样可以通过
获取true和其他非数字值arr = arr.filter(function(item) {
return !!item && !isNaN(item);
});
可能会更好地工作(我自己也没有对它进行测试 - 给你一些尝试的东西)
答案 4 :(得分:0)
您可以使用数组过滤器
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
答案 5 :(得分:0)
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/