从 Javascript 中的数组中删除某些元素
Deleting certain elements from an array in Javascript
我正在尝试编写一个程序来删除数组中的所有零、空字符串、空值或未定义的值。但是,当我 运行 这个数组时:[1,null,2,3,0,-1,1.1],通过它下面的代码 returns 数组中仍然有 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;
}
}
您需要将 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;
}
使用 .filter() 和虚假值删除不需要的项目
function cleanArray(arr) {
return arr.filter(function (item) {
return !!item;
//or return arr[i] !== 0 && arr[i] !== '' && arr[i] !== null && arr[i] !== undefined
})
}
因为 return arr;
,您已将其置于 for 循环中。一旦代码 运行 到达第一个元素,它就会到达 return 并将函数与数组保持一致,就像在循环的第一个 运行 之后一样。
只需将 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;
}
非常简单,
arr = arr.filter(function(item) {
return !!item;
});
但这会让 true 和其他非数值通过
arr = arr.filter(function(item) {
return !!item && !isNaN(item);
});
可能效果更好(我自己还没有测试过 - 留给你一些尝试)
您可以使用数组过滤器
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
function cleanArray(arr) {
var i = 0, newArr = [];
for (i; i < arr.length; i++) {
if (arr[i]) {
newArr.push(arr[i]);
}
}
return newArr;
}
这肯定有效。希望我有所帮助。
这里的fiddle:https://jsfiddle.net/rok_ed/coakcd3L/
我正在尝试编写一个程序来删除数组中的所有零、空字符串、空值或未定义的值。但是,当我 运行 这个数组时:[1,null,2,3,0,-1,1.1],通过它下面的代码 returns 数组中仍然有 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;
}
}
您需要将 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;
}
使用 .filter() 和虚假值删除不需要的项目
function cleanArray(arr) {
return arr.filter(function (item) {
return !!item;
//or return arr[i] !== 0 && arr[i] !== '' && arr[i] !== null && arr[i] !== undefined
})
}
因为 return arr;
,您已将其置于 for 循环中。一旦代码 运行 到达第一个元素,它就会到达 return 并将函数与数组保持一致,就像在循环的第一个 运行 之后一样。
只需将 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;
}
非常简单,
arr = arr.filter(function(item) {
return !!item;
});
但这会让 true 和其他非数值通过
arr = arr.filter(function(item) {
return !!item && !isNaN(item);
});
可能效果更好(我自己还没有测试过 - 留给你一些尝试)
您可以使用数组过滤器
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
function cleanArray(arr) {
var i = 0, newArr = [];
for (i; i < arr.length; i++) {
if (arr[i]) {
newArr.push(arr[i]);
}
}
return newArr;
}
这肯定有效。希望我有所帮助。 这里的fiddle:https://jsfiddle.net/rok_ed/coakcd3L/