Javascript 从JS数组中删除不同的项
我试图解决一个练习,其中我需要创建函数cleanArray并从数组中删除各种项。这是我能做到的Javascript 从JS数组中删除不同的项,javascript,arrays,Javascript,Arrays,我试图解决一个练习,其中我需要创建函数cleanArray并从数组中删除各种项。这是我能做到的 function cleanArray(arr) { for (var i = 0; i < arr.length; i++) { if (arr[i] === null || 0 || "" || false || undefined) { arr.splice(i, 1); return arr
function cleanArray(arr) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] === null || 0 || "" || false || undefined) {
arr.splice(i, 1);
return arr
}
}
}
函数清除数组(arr){
对于(变量i=0;i
但这只会为我过滤掉null
。我曾尝试将要删除的项放在单独的数组中或逐个删除,但它要么返回undefined
,要么仅过滤掉0,即使它不是第一个要删除的项
我见过其他答案,人们使用
过滤器
或索引
,但我想看看是否有办法使用拼接
。这里不能使用逻辑运算符吗?这不是进行多重比较的方式。您的if条件可以写为:
arr[i] === null || 0 === 1 || "" === 1 || false === 1 || undefined === 1
现在很清楚为什么它不起作用了,对吧?您需要将arr[i]
与以下每个值进行比较:
function cleanArray(arr) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] === null || arr[i] === 0 || arr[i] === "" || arr[i] === false || arr[i] === undefined) {
arr.splice(i, 1);
return arr
}
}
}
您可以通过两个简单的步骤来简化此过程
const数组=[1,2,”,null,未定义,3,“4”,true,5,false,6”]
常量isFalsy=值=>!!值===false
//这只是为了让代码更具可读性
常量Istruly=value=>!isFalsy(值)
consttrullyvalues=array.reduce((a,c)=>isFalsy(c)?a:[…a,c],])
//将从上面返回相同的
常量filteredtrullyvalues=array.filter(Istruly)
这就足够了:
if (!arr[i]) {
arr.splice(i, 1);
return arr
}
因为
null | | 0 | | | | | | | false | | | undefined
的计算结果为false。每次进行不同检查时都必须进行比较:您应该将其理解为:“如果arr[i]==null
,或arr[i]==0
…或arr[i]==undefined
;在所有这些情况下都要执行此操作……”,但是无条件返回仍然是一个问题。您可以用arr.filter(布尔值)
替换整个代码。更好的目标:。@azibom你的目标是什么?请看,“我想看看有没有办法用拼接”为什么<代码>拼接适用于索引中的更改,它会改变源数组。而且,它更复杂,性能更低。再读一遍你的问题,然后试着先用简单的方法解决。在实际情况中,如果使用拼接
而不是使用reduce
或过滤器
执行筛选操作,则会引入更多问题。
if (!arr[i]) {
arr.splice(i, 1);
return arr
}