Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 试图从数组中仅删除字符串元素,但不能向右循环_Javascript_Arrays - Fatal编程技术网

Javascript 试图从数组中仅删除字符串元素,但不能向右循环

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]);

嗨,我正在尝试从数组中仅删除字符串元素。我想做一个循环,检查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]);
                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选项更好,但希望这能帮助您理解代码不工作的原因