2016-12-26 23 views
1

我正在嘗試編寫一個函數,該函數使用forEach和array.shift()+ array.pop()連續添加數組的第一個和最後一個元素。迭代地在數組中添加第一個和最後一個數字

問題是for循環沒有完成最內層的數字,所以數組總是留下2個值。

代碼:

function choreAssignment(chores) { 
    chores.sort(function(a, b) {return a - b}); 
    var assignment = []; 
    chores.forEach(function() { 
    assignment.push((chores.pop() + chores.shift())); 
}); 
    return assignment.sort(function(a, b) {return a - b}); 
} 

上面的代碼正常工作,但它留下的chores陣列內最裏面的兩個值。

例如,如果我運行:

代碼:

var arr = [1, 4, 7, 2, 5, 9, 4, 3]; 
choreAssignment(arr); 

我得到:

[8, 9, 10] 

即,它增加了9 & 1,7 & 2,5 & 3 ,但它會在數組內部留下[4,4]。

我不知道這是爲什麼。謝謝。

+1

你舉的例子和說明似乎並不匹配。我希望對於樣本輸入「[1,4,7,2,5,9,4,3]」,輸出是'[4,8,16,7]'。 – pzp

+0

它首先將雜事算法從最小值排序到最大值。所以在它使用> shift()和pop()之前,值被列爲[1,2,3,4,4,5,7,9],所以它們加在一起9 + 1,7 + 2和5 + 3 ,但由於某種原因,不是4 + 4。 –

回答

3

嘗試改變的forEach到:

while (chores.length) { 
    assignment.push((chores.pop() + chores.shift())); 
} 

注意這是假定總有偶數個元素的數組

+0

謝謝,這工作。你能詳細說明爲什麼這種方法有效,但是forEach沒有?我不明白爲什麼一個人會工作,而不是另一個。 –

+0

@JonathanBechtel當你迭代它時,從數組中移除元素通常是一個壞主意。 – pzp

+0

@pzp感謝您的反饋。我正在考慮使用減少,但沒有連接它的點,所以我用這種方法來代替。這不會用於生產,它只是踢輪胎。 –

相關問題