我有一个Javascript / Typescript集合
[
{"order":1,"step":"abc:","status":true},
{"order":2,"step":"xyz","status":true},
{"order":3,"step":"dec","status":false},
{"order":4,"step":"pqr","status":false},
{"order":5,"step":"tuv","status":false}
....
];
我需要编写一个函数,每次调用它时都会识别第一次出现的false(上例中的Order:3)并将其更新为true。如果再次调用上述方法,则下一个元素(order:4)将被更新。错误的步骤将始终低于已完成的步骤,即真实。
编写此函数的最佳方法(最简单,代码更少,更优雅)是什么?我可以手动循环使用集合中的每个项目,检查第一次出现的false,然后更新它。
答案 0 :(得分:5)
在ES6中,您可以使用:
yourArray.find((element) => !element.status).status = true;
请参阅find()
及其兼容性表。
请注意,如果没有status: false
条目,则会失败。例如,快速而肮脏的修复可能如下所示。但这完全取决于您的使用案例。
(yourArray.find((element) => !element.status) || {}).status = true;
答案 1 :(得分:3)
你所描述的几乎就是你将如何做到这一点:
for (let order of orders) {
if (!order.status) {
order.status = true;
break;
}
}
答案 2 :(得分:2)
当您查找所需的匹配项时,请插入“break”语句以停止搜索。
示例:
for( var i=0; i<recs.length; i++ ) {
if ( recs[i]['status'] == false ) {
recs[i]['status'] = true;
break;
}
}
答案 3 :(得分:1)
你可以使用Lodash find方法找到第一次出现错误状态。
示例代码
_.find(users, function(object) { return object.status === false });