如何在过滤器等数组方法中使用break语句?

Oza*_*zan 4 javascript arrays

我试图解决一个需要的算法挑战;

删除数组的元素(第一个参数),从前面开始,直到谓词(第二个参数)返回 true。

第二个参数 func 是一个函数,您将使用它来测试数组的第一个元素,以确定是否应该删除它。

返回数组的其余部分,否则返回一个空数组。

虽然我已经能够通过循环数组来解决这个问题,但我想知道是否有办法在方法中实现 break 语句。

是否可以通过重新定义 Array.prototype.filter 方法来接受 break 语句来完成?

尽管解决方案可能很简单,因为 JavaScript 中的数组方法不接受这一点。你如何绕过它?

function dropElements(arr, func) {
  return arr.filter(func);
}
Run Code Online (Sandbox Code Playgroud)

Nen*_*car 6

您可以只使用for循环,当函数返回 true 时,您可以中断循环并从该索引返回结果。

var arr = [1, 2, 3, 4, 5, 6, 7, 8];

function drop(data, func) {
  var result = [];
  for (var i = 0; i < data.length; i++) {
    var check = func(data[i]);
    if (check) {
      result = data.slice(i);
      break;
    }
  }
  return result;
}

var result = drop(arr, e => e == 4)

console.log(result)
Run Code Online (Sandbox Code Playgroud)

您还可以使用findIndex(),如果找到匹配项,您可以从该索引切片数组,否则返回空数组。

var arr = [1, 2, 3 ,4 ,5 ,6 ,7, 8];

var index = arr.findIndex(e => e == 4)
var result = index != -1 ? arr.slice(index) : []

console.log(result)
Run Code Online (Sandbox Code Playgroud)