繁体   English   中英

循环对象数组返回一个数组

[英]Loop over an array of objects return an array

我试图返回满足 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))

当你用 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))

这是因为您在第一次 if 语句为真后退出函数。 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

发生这种情况是因为您返回了在此语句中遇到的第一个事件:

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 运算符,该运算符将确保仅将其名称返回到数组中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM