在对象数组上过滤和映射
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' ]
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' ]