我试图解决所需的算法挑战;
从数据开始删除数组的元素(第一个参数) 前面,直到谓词(第二个参数)返回true。
第二个参数func是一个你用来测试第一个参数的函数 数组的元素,以决定是否应该删除它。
返回数组的其余部分,否则返回一个空数组。
虽然我已经能够通过循环数组找到一个冗长的解决方案,但我想知道是否有办法在方法中实现break语句。
可以通过重新定义Array.prototype.filter方法来接受break语句来实现吗?
尽管解决方案可能很简单,但JavaScript中的数组方法并不接受这一点。你怎么绕过那个?
function dropElements(arr, func) {
return arr.filter(func);
}
答案 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;
您也可以使用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)
&#13;