filter()返回空数组

11
下一个新手问题就在看似无尽的“array”(数组)学习中。是的,我感觉自己什么也不懂。是的,我知道这很简单。不,我自己想不出来。
我有一个数组,我正在尝试通过筛选器访问它。没有特别的原因,只是在免费编码网站上的一个挑战:

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
“cand”是完整的数组,没有“alter”属性。该数组内的对象有自己的属性。 - charlietfl
3个回答

6

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

你需要传递一个参数作为过滤函数。你也可以使用 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)}`);


将JSON引入游戏有何意义?不想用它来装饰,直接受益了吗? - HJW
1
有点老的线程,但感谢你提供明确的例子,我一直在缺少 return 关键字。 - Jorge Vicente Mendoza

5
将一个参数设置给过滤函数,并在返回值中使用它。

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);


2
你需要添加回调参数。
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);


那么我如何仅显示新数组中的年龄或姓名? - HJW
然后您可以映射属性,例如names = filter.map(function (cand) { return cand.name; }); - Nina Scholz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接