我试图返回满足if语句条件的对象数组中每个名称的数组。能否请您帮我了解为什么我的代码仅在满足条件时才只返回名字?我的目标是返回满足if语句中条件的所有对象名称的数组。
function getNamesOfLegalDrivers(people){
for(let i =0; i < examplePeopleArray.length; i++){
if(examplePeopleArray[i].age > 15) {
return examplePeopleArray[i].name
}
}
}
const examplePeopleArray = [
{ name: 'John', age : 14},
{ name : 'Joey', age : 16},
{ name : 'Jane', age: 18}
];
console.log(getNamesOfLegalDrivers(examplePeopleArray))
答案 0 :(得分:4)
以return开始的行会结束函数(类似于break如何结束循环)。
function getNamesOfLegalDrivers(people){
let returnArray = [];
let numberOfDrivers = people.length;
for(let i =0; i < numberOfDrivers; i++){
if(people[i].age > 15) {
returnArray.push(people[i].name)
}
}
return returnArray;
}
const examplePeopleArray = [
{ name: 'John', age : 14},
{ name : 'Joey', age : 16},
{ name : 'Jane', age: 18}
];
console.log(getNamesOfLegalDrivers(examplePeopleArray))
答案 1 :(得分:2)
这是因为if语句为true后第一次退出函数。 return
停止执行该函数并返回值。
相反,您需要在遍历整个for循环之后返回所有值。
function getNamesOfLegalDrivers(people){
let drivers = [];
for(let i=0; i < people.length; i++){
if(people[i].age > 15) {
drivers.push(people[i]['name']);
}
}
return drivers;
}
const examplePeopleArray = [
{ name: 'John', age : 14},
{ name : 'Joey', age : 16},
{ name : 'Jane', age: 18}
];
console.log(getNamesOfLegalDrivers(examplePeopleArray));
此外,在函数内部,您正在使用全局变量examplePeopleArray
-您应该在使用people
变量(传递给函数的信息)。否则,如果您要更改传递给函数的数组(例如,第二个驱动程序列表),您仍会查看examplePeopleArray
。
答案 2 :(得分:2)
之所以发生这种情况,是因为您返回了在此语句中遇到的第一个匹配项:
return examplePeopleArray[i].name
假设您要保留该逻辑,则应将所需结果存储在数组中,然后在for循环之外返回最终数组:
function getNamesOfLegalDrivers(people){
let names = [];
for(let i =0; i < examplePeopleArray.length; i++){
if(people[i].age > 15) {
names.push(people[i].name);
}
}
return names;
}
const examplePeopleArray = [
{ name: 'John', age : 14},
{ name : 'Joey', age : 16},
{ name : 'Jane', age: 18}
];
console.log(getNamesOfLegalDrivers(examplePeopleArray))
另外,更干净的方法来达到相同的结果是:
function getNamesOfLegalDrivers(people){
return people.filter(person => person.age > 15).map(person => person.name);
}
const examplePeopleArray = [
{ name: 'John', age : 14},
{ name : 'Joey', age : 16},
{ name : 'Jane', age: 18}
];
console.log(getNamesOfLegalDrivers(examplePeopleArray))
首先,您过滤年龄大于15的年龄并将结果返回给map运算符,这将确保仅将其名称返回到数组。