2017-04-11 99 views
1

我试图解决所需的算法挑战;如何在Array方法中使用break语句,例如filter?

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

第二个参数func是一个函数,用于测试数组的第一个 元素,以决定是否应该放弃它。

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

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

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

虽然解决方案本来可以很简单,但JavaScript中的数组方法并不接受这一点。你怎么绕过这个?

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

最新过滤器没有意义。也许每一个/一些? – dfsq

+0

这完全是关于'.findIndex()'和'.slice()'。你必须像'arr.slice(arr.findIndex(condition))'一样做 – Redu

回答

0

您可以使用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)

您还可以使用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)