首页 > 解决方案 > 从索引开始查找谓词

问题描述

索引开始找到与谓词匹配的数组项(不一定是索引,但有效)的最佳方法是什么(所以我不能直接比较这些项,忘记了indexOf)。

我想从当前位置开始从数组中获取“下一个匹配”项。

以下是我当前的实现:

var currentIndex = 1;

var results = [
  {status: 'AWAITING_APPROVAL'}, // Not matched
  {status: 'APPROVED'},
  {status: 'APPROVED'},
  {status: 'APPROVED'},
  {status: 'AWAITING_APPROVAL'},
  {status: 'APPROVED'},
];

var nextIndex = results
  .slice(currentIndex)
  .findIndex(function (content) {
    return content.status === 'AWAITING_APPROVAL';
  });

if (nextIndex !== -1) {
  nextIndex += currentIndex;
  // Here we can use nextIndex which is 4
  console.log(nextIndex);
}

当然,我可以只做一个基本的 for 循环/ifs,但我想知道是否有更好的方法(也许使用 lodash)。

标签: javascriptarrayssearchlodash

解决方案


您可以添加检查以获取更大的索引。

var currentIndex = 1,
    results = [{ status: 'AWAITING_APPROVAL'}, { status: 'APPROVED'}, { status: 'APPROVED'}, { status: 'APPROVED'}, { status: 'AWAITING_APPROVAL'}, { status: 'APPROVED'}],
    nextIndex = results.findIndex(({ status }, i) => i > currentIndex && status === 'AWAITING_APPROVAL');

console.log(nextIndex);


推荐阅读