我正在尝试检查传递给duckCount的参数是否具有属性'quack'并返回具有此属性的参数的数量。
为此,我试图在arguments数组上使用过滤器,但由于某些原因,我无法使用。有人知道为什么吗?
var notDuck = Object.create({ quack: true })
var duck = { quack: true }
duckCount(duck, notDuck) // 1
function duckCount() {
// SOLUTION GOES HERE
console.log(arguments)
return arguments.filter((argument) => argument.hasOwnProperty('quack')).length
}
答案 0 :(得分:1)
arguments是一个对象,但不是一个数组,其中filter
是一个数组函数。使用rest parameter
将参数对象转换为数组,然后应用数组函数
var notDuck = Object.create({
quack: true
})
var duck = {
quack: true
}
// 1
function duckCount() {
// SOLUTION GOES HERE
console.log(arguments)
return [...arguments].filter((argument) => argument.hasOwnProperty('quack')).length
}
console.log(duckCount(duck, notDuck))
您还可以使用Array.from来从对象之类的数组中新建一个实例
var notDuck = Object.create({
quack: true
})
var duck = {
quack: true
}
// 1
function duckCount() {
return Array.from(arguments).filter((argument) => argument.hasOwnProperty('quack')).length
}
console.log(duckCount(duck, notDuck))
答案 1 :(得分:0)
brk的解决方案是最好的方法,如果您可以保证您的代码仅能在支持ES6的浏览器上运行(如今,这些浏览器主要表示“非IE”),但是有时您确实必须支持旧版浏览器。 (由于使用了箭头功能,这可能不适用于OP,但是这可能对其他人有用。)如果需要,有一个有用的技巧,几乎不比使用数组解构或Array.from
:
return Array.prototype.filter.apply(arguments, function(argument) {/* your function goes here */});