首页 > 解决方案 > 每次运行后纠正当前状态

问题描述

我有一个包含产品网址状态的数组。

我想通过一个 while 循环运行它,每次运行时只获取具有state = true.

目前我在一个无限循环中运行:

const product = ['Product 1', 'Product 2']

const res = []
for (let i = 0; i < product.length; i++) {
  res.push({
    product: product[i],
    url: 'price',
    state: false,
  }, {
    product: product[i],
    url: 'groceries/',
    state: false,
  }, {
    product: product[i],
    url: 'car',
    state: false,
  }, {
    product: product[i],
    url: 'automotive/',
    state: false,
  }, {
    product: product[i],
    url: 'computer/',
    state: false,
  })
}

function setState(res, state) {
  res.state = state
}

function getState(res) {
  return res.state
}

let currentState = res.filter(el => el.state = true)
let i = 0
while (currentState.length > 0) {
  currentState = res.filter(el => el.state = true)
  this.setState(res[i], false)
  console.log(`Set state to false for ${JSON.stringify(res[i])}`)
  console.log(currentState.length)
  i++
}

有什么建议如何仅获取对象state = true并在每次运行后将状态设置为 true 以便我的循环终止?

感谢您的回复!

标签: javascript

解决方案


这里有两个问题,您使用 = 而不是 == 以及您过早地重新检查状态

还应该注意的是,你真的不需要 == true 它可以只是 res.filter(el => el.state)

let currentState = res.filter(el => el.state == true)
let i = 0
while (currentState.length > 0) {
  this.setState(res[i], false)
  currentState = res.filter(el => el.state == true)
  console.log(`Set state to false for ${JSON.stringify(res[i])}`)
  console.log(currentState.length)
  i++
}

推荐阅读