这是我编写的用于从数组中过滤掉数值的代码,但它返回完整的数组。我无法在代码中找到问题。请帮帮我,我被卡住了......
<!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>
答案 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"