为什么我的函数不是从数组中删除所有字符串? JavaScript的

时间:2017-02-16 00:41:31

标签: javascript

我有这个数组“

var text = [ 1,2,"a","etf",5,"9f",12,"laks"];

我也有这个函数将遍历text []并删除字符串。它只显示数字:

var isNumber = function(){
    for(var i = 0; i<text.length; i++){
        if(isNaN(text[i])){
            text.splice(i,1);          
        }
    }
    return text;
}
isNumber();

当我运行它时,它会删除一些字符串,而不是所有字符串......任何想法? 谢谢!

4 个答案:

答案 0 :(得分:1)

在循环播放时,您正在从数组中删除项目。试试这个:

var isNumber = function(){
    for(var i = 0; i < text.length; i++){
        if(isNaN(text[i])){
            text.splice(i, 1);
            i--; // go back one step so we won't skip the item after
        }
    }
    return text;
}

答案 1 :(得分:1)

如果你可以运行ES6,那么以下就更简单了

return text.filter(t => !isNaN(t));

还有Number.isInteger,它比isNaN更受欢迎,如果需要,可以很容易地进行polyfill。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger

答案 2 :(得分:0)

如果您只想过滤字符串,可以使用带过滤器的typeof

text = text.filter(function(item){
  return typeof item !== 'string';
})

答案 3 :(得分:0)

可以使用过滤器返回所有数字值。

示例代码段:

var text = [1, 2, "a", "etf", 5, "9f", 12, "laks"];

function isNumber(arr) {
  return arr.filter(function(value) {
    return !isNaN(value)
  })
}

console.log(isNumber(text))