如何在Array方法中使用break语句,例如filter?

时间:2017-04-11 21:12:38

标签: javascript arrays

我试图解决所需的算法挑战;

  

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

     

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

     

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

虽然我已经能够通过循环数组找到一个冗长的解决方案,但我想知道是否有办法在方法中实现break语句。

可以通过重新定义Array.prototype.filter方法来接受break语句来实现吗?

尽管解决方案可能很简单,但JavaScript中的数组方法并不接受这一点。你怎么绕过那个?

function dropElements(arr, func) {
  return arr.filter(func);
}

1 个答案:

答案 0 :(得分:2)

你可以使用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)
&#13;
&#13;
&#13;

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

&#13;
&#13;
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)
&#13;
&#13;
&#13;