Javascript 试图从数组中仅删除字符串元素,但不能向右循环
嗨,我正在尝试从数组中仅删除字符串元素。我想做一个循环,检查el是否是字符串,如果是字符串,则必须拼接。但现在它只删除第一个匹配元素,即字符串。为什么?Javascript 试图从数组中仅删除字符串元素,但不能向右循环,javascript,arrays,Javascript,Arrays,嗨,我正在尝试从数组中仅删除字符串元素。我想做一个循环,检查el是否是字符串,如果是字符串,则必须拼接。但现在它只删除第一个匹配元素,即字符串。为什么? var arr = [1,2, 'a', 'b'] for(var i = 0; i < arr.length; i++) if(typeof arr[i] === "string"){ var index = arr.indexOf(arr[i]);
var arr = [1,2, 'a', 'b']
for(var i = 0; i < arr.length; i++)
if(typeof arr[i] === "string"){
var index = arr.indexOf(arr[i]);
if(index > -1){
arr.splice(index, 1)
}
console.log(arr);
}
var arr=[1,2,'a','b']
对于(变量i=0;i-1){
阵列拼接(索引,1)
}
控制台日志(arr);
}
您可以按如下方式选择阵列:
arr.filter(function(item){ return typeof item !== 'string';});
filter()
方法使用通过的所有元素创建一个新数组
由提供的函数实现的测试
您可以按如下方式选择阵列:
arr.filter(function(item){ return typeof item !== 'string';});
filter()
方法使用通过的所有元素创建一个新数组
由提供的函数实现的测试
您正在修改正在循环的数组。所以您在运行时修改它,这会影响您的结果。在遍历数组时,不应拼接数组 您可以使用
Array.filter
arr = arr.filter(Number);
您正在修改正在循环的数组。所以您在运行时修改它,这会影响您的结果。在遍历数组时,不应拼接数组 您可以使用
Array.filter
arr = arr.filter(Number);
您可以在适当的位置修改阵列。让我们看看您的迭代
(i=0, type number)
[1,2,'a','b']
(i=1, type number)
[1,2,'a','b']
(i=2, type string)
[1,2,'b'] // removed 'a' at index 2
(i=3, type string)
[1,2,'b'] // there is no 4th item
我建议只使用filter()
来过滤数组:
arr=arr.filter(function(item){return typeof item != 'string'})
您可以在适当的位置修改阵列。让我们看看您的迭代
(i=0, type number)
[1,2,'a','b']
(i=1, type number)
[1,2,'a','b']
(i=2, type string)
[1,2,'b'] // removed 'a' at index 2
(i=3, type string)
[1,2,'b'] // there is no 4th item
我建议只使用filter()
来过滤数组:
arr=arr.filter(function(item){return typeof item != 'string'})
删除项目时arr.length会发生变化,将索引1字符提前到预期位置,因此需要对其进行补偿。加上
i--;
在拼接之后。像这样:
var arr = [1,2, 'a', 'b']
for(var i = 0; i < arr.length; i++)
if(typeof arr[i] === "string"){
var index = arr.indexOf(arr[i]);
if(index > -1){
arr.splice(index, 1)
i--;
}
console.log(arr);
}
var arr=[1,2,'a','b']
对于(变量i=0;i-1){
阵列拼接(索引,1)
我--;
}
控制台日志(arr);
}
删除项目时,arr.length会发生变化,将索引字符提前1个字符,因此需要对其进行补偿。加上
i--;
在拼接之后。像这样:
var arr = [1,2, 'a', 'b']
for(var i = 0; i < arr.length; i++)
if(typeof arr[i] === "string"){
var index = arr.indexOf(arr[i]);
if(index > -1){
arr.splice(index, 1)
i--;
}
console.log(arr);
}
var arr=[1,2,'a','b']
对于(变量i=0;i-1){
阵列拼接(索引,1)
我--;
}
控制台日志(arr);
}
arr.filter选项更好,但希望这能帮助您理解代码不工作的原因arr.filter选项更好,但希望这能帮助您理解代码不工作的原因