【问题标题】:filter() returns empty arrayfilter() 返回空数组
【发布时间】:2018-03-26 12:29:41
【问题描述】:

似乎没完没了的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 属性。我也有一种感觉,我需要一个循环遍历每个人的属性。请帮忙,谢谢

【问题讨论】:

  • cand 是完整数组,没有属性 alter。数组中的对象做

标签: javascript multidimensional-array


【解决方案1】:

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

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

arrow 函数表达式的语法比函数表达式短,并且不绑定自己的 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 引入游戏有什么意义?不是很喜欢它,有直接的好处吗?
【解决方案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);

【讨论】:

  • 然后我如何只显示年龄,或者只显示新数组中的名称?
  • 然后你可以映射属性,比如names = filter.map(function (cand) { return cand.name; });
【解决方案3】:

为过滤器函数设置一个参数并在返回中使用它。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2021-08-11
    • 2017-02-27
    • 2020-04-01
    • 2019-04-17
    相关资源
    最近更新 更多