【问题标题】:Loops through an array, only returning based on a specific criteria?循环遍历数组,仅根据特定条件返回?
【发布时间】:2020-01-06 21:56:59
【问题描述】:

我正试图找出我哪里出了问题。我正在做一个自学的程序,似乎时不时地被卡住了。

“编写一个循环遍历给定对象数组的程序。如果用户已婚,则将他们的名字打印到屏幕上。”


const users = [
  {
    'first_name': 'Homer',
    'last_name' : 'Simpson',
    'dob': '03/19/195-', 
    'married': true, 
  }, 
  {
    'first_name': 'Marge',
    'last_name': 'Simpson',
    'dob': '05/12/56',
    'married': true,
  }, 
  {
    'first_name': 'Lisa',
    'last_name': 'Simpson',
    'dob': '04/19/87',
    'married': false,
  }, 
]

for ([i] in users) {
 if (users['married'] = true)
    console.log(users['first_name'])
  }

预期回报应该是

荷马

玛吉

但我只是得到

未定义

未定义

未定义

【问题讨论】:

  • = 是评估。 ===== 是比较。你的循环看起来也不对。
  • 如果您认为任何回复都回答了您的问题,请考虑将其标记为已接受,以便未来读者受益。

标签: javascript arrays node.js loops


【解决方案1】:

const users = [
  {
    'first_name': 'Homer',
    'last_name' : 'Simpson',
    'dob': '03/19/195-', 
    'married': true, 
  }, 
  {
    'first_name': 'Marge',
    'last_name': 'Simpson',
    'dob': '05/12/56',
    'married': true,
  }, 
  {
    'first_name': 'Lisa',
    'last_name': 'Simpson',
    'dob': '04/19/87',
    'married': false,
  }, 
]

for (i in users) {
  if (users[i]['married'] === true)
     console.log(users[i]['first_name'])
  }

【讨论】:

    【解决方案2】:

    看看这个简短而甜蜜的版本

    const users = [{
        'first_name': 'Homer',
        'last_name': 'Simpson',
        'dob': '03/19/195-',
        'married': true,
      },
      {
        'first_name': 'Marge',
        'last_name': 'Simpson',
        'dob': '05/12/56',
        'married': true,
      },
      {
        'first_name': 'Lisa',
        'last_name': 'Simpson',
        'dob': '04/19/87',
        'married': false,
      },
    ]
    
    users.forEach(user => {
    if(user.married) console.log(user.first_name)
    })

    【讨论】:

      【解决方案3】:
      for ([i] in users) {
       if (users['married'] = true)
          console.log(users['first_name'])
      }
      

      您的if 声明存在两个问题:

      1) 通过users['married'],您尝试访问usersmarried 属性,但它不存在,users 是一个数组。

      2) 您正在使用赋值运算符= 进行比较。您应该使用===== 进行比较。

      for...in 迭代对象的可枚举属性。由于users 是一个数组,我们正在迭代数组的索引。因此,要访问特定索引处的值,我们使用users[i]

      我还将删除 i 周围不必要的括号。

      固定代码:

        for (i in users) {
          if (users[i]['married'] == true)
            console.log(users[i]['first_name'])
        }
      

      演示:

      const users = [
        {
          'first_name': 'Homer',
          'last_name' : 'Simpson',
          'dob': '03/19/195-', 
          'married': true, 
        }, 
        {
          'first_name': 'Marge',
          'last_name': 'Simpson',
          'dob': '05/12/56',
          'married': true,
        }, 
        {
          'first_name': 'Lisa',
          'last_name': 'Simpson',
          'dob': '04/19/87',
          'married': false,
        }, 
      ]
      
      for (i in users) {
        if (users[i]['married'] == true)
          console.log(users[i]['first_name'])
      }

      【讨论】:

      • for ([i] in users) { 怎么样?有什么话吗?
      • @MedetTleukabiluly - 我为for...in 循环添加了解释。
      【解决方案4】:

      使用[].forEach

      const users = [{
          'first_name': 'Homer',
          'last_name': 'Simpson',
          'dob': '03/19/195-',
          'married': true,
        },
        {
          'first_name': 'Marge',
          'last_name': 'Simpson',
          'dob': '05/12/56',
          'married': true,
        },
        {
          'first_name': 'Lisa',
          'last_name': 'Simpson',
          'dob': '04/19/87',
          'married': false,
        },
      ]
      
      users.forEach(function (user) {
        if (user.married === true) {
          console.log(user.first_name)
        }
      })

      【讨论】:

        【解决方案5】:

        for/inloops through the properties of an object,而你想循环遍历对象本身...

        const users = [
          {
            'first_name': 'Homer',
            'last_name' : 'Simpson',
            'dob': '03/19/195-', 
            'married': true, 
          }, 
          {
            'first_name': 'Marge',
            'last_name': 'Simpson',
            'dob': '05/12/56',
            'married': true,
          }, 
          {
            'first_name': 'Lisa',
            'last_name': 'Simpson',
            'dob': '04/19/87',
            'married': false,
          }, 
        ]
        for(var i = 0; i < users.length; i++)
          {
            if(users[i]['married'] == true)
              {console.log(users[i]['first_name'])}
          }
        

        【讨论】:

          猜你喜欢
          • 2016-07-02
          • 2019-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-17
          • 1970-01-01
          相关资源
          最近更新 更多