试图从数组中只移除字符串元素,但无法向右循环
trying to remove only string element from an array but cant loop right
hi-im试图只从数组中删除字符串元素。我想做一个循环,检查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);
}
您正在修改正在循环的数组。所以你在运行时对它进行了修改,这会影响你的结果。在遍历数组时,不应该拼接数组。
您可以使用Array.filter
执行以下操作
arr = arr.filter(Number);
您可以filter
这样的数组:
arr.filter(function(item){ return typeof item !== 'string';});
filter()
方法使用通过由所提供的功能实现的测试。
当您删除一个项目时,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);
}
您在原地修改数组。让我们看看您的迭代。
(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'})
相关文章:
- PHP:同时循环元素粘在一起
- 按数据属性循环元素并替换值
- Javascript/Jquery 循环元素
- for 循环元素的执行时间比内部 AJAX 调用可以响应的要快
- jQuery:对于循环元素 attr 更改,所有元素都有最后一个元素 attr
- 以延迟的方式循环元素
- 通过使用JQuery加载外部文件来循环元素
- Javascript库中每个循环元素
- 无法访问嵌套的循环元素
- JQuery中的循环元素
- 如何循环元素&数数
- 如何在jQuery事件中引用循环元素
- 循环元素's在DOM中的ID
- 循环元素不起作用
- Javascript循环元素并使用WebdriverIO单击链接
- 循环元素's列表创建一个没有jQuery的转盘
- 调用.onclick函数中方法中选定的循环元素
- 循环元素json数组
- 获取jQuery中每个循环元素的父元素
- 如何在jQuery中循环元素并同时替换