查找集合中第一个项目并更新它的最佳方法是什么

时间:2016-07-01 06:02:45

标签: javascript arrays algorithm typescript

我有一个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,然后更新它。

4 个答案:

答案 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 });

lodash find documentation link