在对象数组上过滤和映射

Filter and Map on Array of Objects

    let team = [
    {'name' : 'Bob Jones', 'Info': {'Height': '6.4', 'Weight': 170}, 'age': 20},
    {'name' : 'John Anderson', 'Info': {'Height': '5.4', 'Weight': 120}, 'age': 23},
    {'name' : 'Tim Hamburger', 'Info': {'Height': '6.1', 'Weight': 180}, 'age': 25},
    {'name' : 'Tom Hamburger', 'Info': {'Height': '6.6', 'Weight': 220}, 'age': 30},
    {'name' : 'Jack Johnson', 'Info': {'Height': '6.0', 'Weight': 190}, 'age': 41},
    {'name' : 'Tommy Tubbs', 'Info': {'Height': '6.1', 'Weight': 180}, 'age': 50},
    ]
    
    let age = (team) => {
      let earlyTwenties = [];
      team.filter((members) => {
        if(members.age >= 20 && members.age <= 25) {
          earlyTwenties.push(members.name)
        }
      });
      return earlyTwenties;
    }
    
    console.log(age(team));//[ 'Bob Jones', 'John Anderson', 'Tim Hamburger' ]

我有一个功能可以过滤所有二十出头的团队成员。我只需要 return 团队成员的名字 而不是他们的全名。

我知道我可以使用 for-loop 并拆分每个名字,然后使用另一个 for 循环 return 每隔一个值给我所有的名字,但我正在努力写得更好使用 HOF 的代码。

关于如何使用 map 拆分数组和 return 只有名字的任何建议都在同一个函数中?

您可以使用 Array#filter 首先获取满足条件的每个玩家年龄,然后 Array#map 使用字符串拆分仅获取他们的名字。

let team = [
{'name' : 'Bob Jones', 'Info': {'Height': '6.4', 'Weight': 170}, 'age': 20},
{'name' : 'John Anderson', 'Info': {'Height': '5.4', 'Weight': 120}, 'age': 23},
{'name' : 'Tim Hamburger', 'Info': {'Height': '6.1', 'Weight': 180}, 'age': 25},
{'name' : 'Tom Hamburger', 'Info': {'Height': '6.6', 'Weight': 220}, 'age': 30},
{'name' : 'Jack Johnson', 'Info': {'Height': '6.0', 'Weight': 190}, 'age': 41},
{'name' : 'Tommy Tubbs', 'Info': {'Height': '6.1', 'Weight': 180}, 'age': 50},
];

let res = team.filter(v => v.age > 19 && v.age < 26)
              .map(v => v.name.split(" ")[0]);
              
console.log(res);

您可以使用 map 并且对于每个名称,在白色 space 和 return 上拆分第一个元素:

age(team).map(fullname => fullname.split(" ")[0])

let team = [
{'name' : 'Bob Jones', 'Info': {'Height': '6.4', 'Weight': 170}, 'age': 20},
{'name' : 'John Anderson', 'Info': {'Height': '5.4', 'Weight': 120}, 'age': 23},
{'name' : 'Tim Hamburger', 'Info': {'Height': '6.1', 'Weight': 180}, 'age': 25},
{'name' : 'Tom Hamburger', 'Info': {'Height': '6.6', 'Weight': 220}, 'age': 30},
{'name' : 'Jack Johnson', 'Info': {'Height': '6.0', 'Weight': 190}, 'age': 41},
{'name' : 'Tommy Tubbs', 'Info': {'Height': '6.1', 'Weight': 180}, 'age': 50},
]

let age = (team) => {
  let earlyTwenties = [];
  team.filter((members) => {
    if(members.age >= 20 && members.age <= 25) {
      earlyTwenties.push(members.name)
    }
  });
  return earlyTwenties;
}

console.log(age(team));

console.log(
  age(team).map(fullname => fullname.split(" ")[0])
)

您可以先获取所有对象,然后仅映射对象的名字作为结果集。

let team = [ { name: 'Bob Jones', Info: { Height: '6.4', Weight: 170 }, age: 20 }, { name: 'John Anderson', Info: { Height: '5.4', Weight: 120 }, 'age': 23 }, { name: 'Tim Hamburger', Info: { Height: '6.1', Weight: 180 }, 'age': 25 }, { name: 'Tom Hamburger', Info: { Height: '6.6', Weight: 220 }, age: 30 }, { name: 'Jack Johnson', Info: { Height: '6.0', Weight: 190}, age: 41}, { name: 'Tommy Tubbs', Info: { Height: '6.1', Weight: 180}, age: 50}],
    age = team => team.filter(members => members.age >= 20 && members.age <= 25)
                      .map(members => members.name.split(' ')[0]);

console.log(age(team));//[ 'Bob Jones', 'John Anderson', 'Tim Hamburger' ]