【问题标题】:Compare objects within a array比较数组中的对象
【发布时间】:2022-01-23 16:10:01
【问题描述】:

我有一个数组

[{"name": "pay1","isEnabled": true},{"name": "pay2","isEnabled": false}]

我需要控制isEnabled 为真的值。

我已尝试使用 forEach 方法,但如果两个值都为真,则无法正常工作。

因为 forEach 迭代每个对象,所以它一次会得到一个值。

下面是我的代码

const arr = [{"name": "pay1","isEnabled": true},{"name": "pay2","isEnabled": true}]

arr.forEach(item => {

              if ((item.name === 'pay1' && item.isEnabled) && (item.name === 'pay2' && item.isEnabled)) {
                console.log('both enabled')
              } else if (item.name === 'pay1' && item.isEnabled) {
                console.log('pay1 enabled')
              } else if(item.name === 'pay2' && item.isEnabled){
             console.log('pay2 enabled')
              }
            })

我该如何解决这个问题。

提前谢谢........

【问题讨论】:

  • 如果是静态的为什么不直接使用if

标签: javascript ecmascript-6


【解决方案1】:

无需运行循环。

只需找到 name 具有 pay1name 具有 pay1 的元素。检查每个节点的isEnabled。如果两个名称都为 true,则两者都启用或仅启用一个。

const arr = [{ "name": "pay1", "isEnabled": true }, { "name": "pay2", "isEnabled": true }];
const item1 = arr.find(node => node.name === "pay1");
const item2 = arr.find(node => node.name === "pay2");
if (item1.isEnabled && item2.isEnabled) {
  console.log('both enabled')
} else if (item1.isEnabled) {
  console.log('pay1 enabled')
} else if (item2.isEnabled) {
  console.log('pay2 enabled')
} else {
  console.log('none enabled')
}

【讨论】:

  • @NickParsons 是的,这是一个错字
【解决方案2】:

一种方法是过滤所有启用的国家/地区并显示它们

const arr = [{"name": "pay1","isEnabled": true},{"name": "pay2","isEnabled": true},,{"name": "pay2","isEnabled": false}]


const arrFilt = arr.filter(oneCountry => oneCountry.isEnabled);

arrFilt.forEach(item => {
   console.log(`${item.name} enabled`)
})

【讨论】:

  • 我不认为它会解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多