簡體   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