使用javascript从数组中过滤掉数字索引

时间:2014-09-16 09:19:07

标签: javascript

这是我编写的用于从数组中过滤掉数值的代码,但它返回完整的数组。我无法在代码中找到问题。请帮帮我,我被卡住了......

<!doctype html>
<html lang="en">
    <head>
  <meta charset="utf-8">
  <title>html demo</title>
</head>
<body>
<script>
    arr = ["apple", 5, "Mango", 6];
    function filterNumeric(arrayName){
        var i = 0;
        var numericArray=[];
        for (i; i <arrayName.length;i++){
            if (typeof(arrayName[i] === 'number')) {
                numericArray+=arrayName[i];
            }
        }
        return numericArray;
    }

    var filter = filterNumeric(arr);
    alert(filter);
</script>

</body>
</html>

2 个答案:

答案 0 :(得分:1)

typeof支票中的错字:

if (typeof(arrayName[i]) === 'number') {
//                    ^^^ close the parentheses here
//                                 ^^^ not there

答案 1 :(得分:1)

JavaScript数组有a built-in filtering method

var arr = ["apple", 5, "Mango", 6];
var filtered = arr.filter(function(item) { return (typeof item === "number")});
console.log(filtered); // Array [5,6]

至于您的原始代码,请注意typeof是运算符,而不是函数,所以

if (typeof(foo === "whatever")) {
    // ...
}

相当于

if (typeof some_boolean_value) {
    // ...
}

评估为

if ("boolean") {
    // ...
}

这将永远是真的,这就是为什么你最终得到了整个内容,没有任何过滤。

另请注意,+=运算符没有为数组重载,最终会得到其余值的字符串连接:

var foo = [];
var bar = [1,2,3,4];
foo += bar[2];
console.log(foo); // "3"
console.log(typeof foo); // "string"

您必须使用push方法:

var foo = [];
var bar = [1,2,3,4];
foo.push(bar[2]);
console.log(foo); // Array [3]
console.log(typeof foo); // "object"