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' ]
&#13;
我有一个功能可以过滤所有二十出头的团队成员。我需要仅返回团队成员的名字而不是他们的全名。
我知道我可以使用for-loop
并拆分每个名称,然后使用另一个for循环返回所有其他值,为我提供所有名字,但我尝试使用HOF编写更好的代码。
有关如何使用map拆分数组并在同一函数中只返回名字的任何建议吗?
答案 0 :(得分:3)
您可以使用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);
答案 1 :(得分:0)
您可以使用map
并为每个名称拆分空格并返回第一个元素:
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])
)
&#13;
答案 2 :(得分:0)
您可以先获取所有对象,然后仅将对象的名字映射为结果集。
{{1}}