javascript - 每次运行后纠正当前状态
问题描述
我有一个包含产品、网址和状态的数组。
我想通过一个 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 以便我的循环终止?
感谢您的回复!
解决方案
这里有两个问题,您使用 = 而不是 == 以及您过早地重新检查状态
还应该注意的是,你真的不需要 == 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++
}
推荐阅读
- openvswitch - ovs中的“写入元数据”和“设置元数据”有什么区别?
- android - 后退箭头未转换为汉堡图标
- url - 从 URL 隐藏目录
- jquery - 对话框打开事件未能触发
- sql-server - 获取错误消息:必须声明标量变量
- permissions - rsync 守护进程和权限
- javascript - 默认情况下在html的文本框中仅显示小数点后4位的简单方法是什么
- angular - 如何在我的 Angular4 应用程序中集成聊天功能?
- google-maps-api-3 - 谷歌地图 - 多边形鼠标悬停时的信息窗口
- single-sign-on - 如何在没有私钥的情况下为 saml2 sso 实现服务提供者