2017-04-11 94 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)