我正在尝试将getAnimalByName函数中的参数名称传递给嵌套在其中的函数的返回值。为什么它不能正常工作?现在,如果我调用getAnimalByName,它将返回animals数组中的所有对象,而不仅仅是作为参数传递的对象。
var animals=[
{type: 'mammal', subType: 'dog', name: 'spot', weight: 50},
{type: 'reptile', subType: 'lizard', name: 'gicko', weight: 1},
{type: 'reptile', subtype: 'snake', name: 'buba', weight: 3},
{type: 'mammal', subType: 'rat', name: 'runner', weight: 3}
];
function getAnimalByName(name){
var animal= animals.filter(function(event){
return event.name;
});
return animal;
}
var spot= getAnimalByName('spot');
var gicko= getAnimalByName('gicko');
var buba= getAimalsByName('buba');
var runner= getAnimalByName('runner');
答案 0 :(得分:3)
Array#filter
处理函数(callback
)
var animals = [{
type: 'mammal',
subType: 'dog',
name: 'spot',
weight: 50
}, {
type: 'reptile',
subType: 'lizard',
name: 'gicko',
weight: 1
}, {
type: 'reptile',
subtype: 'snake',
name: 'buba',
weight: 3
}, {
type: 'mammal',
subType: 'rat',
name: 'runner',
weight: 3
}];
function getAnimalByName(name) {
return animals.filter(function(event) {
return event.name === name; //Test value of argument here!
});
}
var spot = getAnimalByName('spot');
var gicko = getAnimalByName('gicko');
var buba = getAnimalByName('buba');
var runner = getAnimalByName('runner');
console.log(spot);
console.log(gicko);
console.log(buba);
console.log(runner);

答案 1 :(得分:3)
过滤器的工作方式在我们需要指定的函数内,无论该特定数组元素是否与特定条件匹配,因此,内部过滤器函数除了truthy
或falsy
值之外,并且由于您返回event.name
,它将始终为truthy
值,并且将值推送到新数组中,因此它返回整个animals数组。
那就是你应该回来的原因
return event.name === name