为什么这个函数返回数组中的所有对象?

时间:2016-06-06 09:53:43

标签: javascript

我正在尝试将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');

2 个答案:

答案 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)

过滤器的工作方式在我们需要指定的函数内,无论该特定数组元素是否与特定条件匹配,因此,内部过滤器函数除了truthyfalsy值之外,并且由于您返回event.name,它将始终为truthy值,并且将值推送到新数组中,因此它返回整个animals数组。

那就是你应该回来的原因

return event.name === name