filter()返回空数组

时间:2017-10-14 14:33:17

标签: javascript multidimensional-array

在看似无穷无尽的array中学习新语言的下一个noob问题。是的,我觉得我什么都不知道。是的,我知道这很容易。不,我自己无法弄明白。

我有一个我试图通过过滤器访问的数组。没有特别的原因,只是对其中一个免费编码网站的挑战:

var cand = [
  {
    name: 'Kevin',
    alter: 19,
  },
  {
    name: 'Walter',
    alter: 22,
  },
  {
    name: 'Herbert',
    alter: 28,
  },
  {
    name: 'Kristin',
    alter: 31,
  },
  {
    name: 'Obergine',
    alter: 39,
  },
  {
    name: 'Hailey',
    alter: 44,
  }
];

var alter = function(){
  return cand.alter < 30;
}

var filter = cand.filter(alter);

filter;

这将返回一个空数组。我感觉我没有正确访问每个alter属性。我也有一种感觉,我需要一个循环遍历每个人的属性的循环。请帮忙,谢谢

3 个答案:

答案 0 :(得分:2)

Set an argument to the filter function and use that in the return.

var cand = [{name: 'Kevin',alter: 19,},{name: 'Walter',alter: 22,},{name: 'Herbert',alter: 28,},{    name: 'Kristin',alter: 31,},{name: 'Obergine',alter: 39,},{name: 'Hailey',alter: 44,}];

// add argument to the filter function | element
var alter = function(element) {
  return element.alter < 30; //use the argument here.
}

var filter = cand.filter(alter);

console.log(filter);

答案 1 :(得分:1)

You need to add the parameter for the callback.

var alter = function(cand) {
//                   ^^^^
    return cand.alter < 30;
}

var cand = [{ name: 'Kevin', alter: 19 }, { name: 'Walter', alter: 22 }, { name: 'Herbert', alter: 28 }, { name: 'Kristin', alter: 31 }, { name: 'Obergine', alter: 39 }, { name: 'Hailey', alter: 44 }];

var alter = function(cand){
    return cand.alter < 30;
}

var filter = cand.filter(alter);

console.log(filter);

答案 2 :(得分:0)

  

filter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。

您需要传递参数作为所需的过滤功能。您也可以使用带有Arrow功能的ES6过滤器。

箭头函数表达式具有比函数表达式更短的语法,并且不绑定它自己的this,arguments,super或new.target。这些函数表达式最适合非方法函数,不能用作构造函数。

var cand = [{name: 'Kevin',alter: 19},{name: 'Walter',alter: 22},{name: 'Herbert',alter: 28},{name: 'Kristin',alter: 31},{name: 'Obergine',alter: 39},{name: 'Hailey',alter: 44}],
  alter = function(item){
    return item.alter < 30;
  },
  filter = cand.filter(alter);
//using normal javascript
console.log('Result Using normal filter javascript :-'+JSON.stringify(filter));

console.log('*************************');
//You can also you ES6 with arrow function

let filter1 = cand.filter(obj=> {return obj.alter<30});

console.log(`Result Using arrow function :- ${JSON.stringify(filter1)}`);