【问题标题】:How do i loop through these objects inside an array using forEach? [duplicate]如何使用 forEach 遍历数组中的这些对象? [复制]
【发布时间】:2019-10-01 22:01:20
【问题描述】:

我有一个数组,里面有一组对象,我将如何遍历它们并检查其中一个对象的状态为真?

menuItems: [
  {
    text1: 'Apple',
    status: false,
    subItems: []
  },
  {
    text2: 'Orange',
    status: false,
    subItems: []
  },
  {
   text3: 'Banana',
    status: true,
    subItems: []
  }
]

我尝试过这样的事情:-

if(menuItems.forEach(active) === 'false') {
then('do something!!!')
}

【问题讨论】:

  • 如果我是你,我会使用过滤器。 let trueItems = menuItems.filter(item => item.status); 如果您想更进一步,请跟随地图。 trueItems.map( item => processForTrueItem(item) );
  • 这是需要您使用forEach 的作业吗?这是可能的,但forEach 可能不是完成这项工作的最佳工具。
  • statustrue 是否保证只有一项,或者可以有几项?
  • @Scott 是的,可能有几个,这只是一个简短的例子。
  • 您是否还必须在任何subItems 中找到true 状态?最好递归处理。

标签: javascript javascript-objects


【解决方案1】:

一个例子:

const menuItems = [
  {
    text: 'Apple',
    status: false,
    subItems: []
  },
  {
    text: 'Orange',
    status: false,
    subItems: []
  },
  {
   text: 'Banana',
    status: true,
    subItems: []
  }
];

menuItems.forEach(menuItem => { if(menuItem.status) { console.log(menuItem.text) } });

阅读 MDN!

https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

【讨论】:

  • 这太棒了。非常感谢。
【解决方案2】:

您有几个选择。在顶层,您可以将 if 语句添加到传递给 forEach 的函数中:

menuItems.forEach((item) => {
  if (item.status) {
    console.log('Do something') // only logs when item.status is true
  }
})

请注意,您的示例代码:menuItems.forEach(active) === 'false') 即使在修复语法后也无法工作,因为在您的示例数据中,status 是一个布尔值,而您正试图将其与带有=== 的字符串进行比较。

回到主要问题:您可以使用filter 方法首先删除任何状态为true的项目,而不是使用if语句:

menuItems.filter(item => item.status).forEach((item) => {
  // The filter function will remove any items where item.status is falsy,
  // leaving only items where status is true.
  console.log('Do something')
})

【讨论】:

  • 谢谢。非常详细的答案。
猜你喜欢
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 2017-06-07
  • 2021-07-29
  • 2022-01-09
  • 2020-02-17
  • 2014-07-31
相关资源
最近更新 更多