2015-04-06 44 views
0

我對此代碼的期望是[1, 2, 5, 6, 7, 8, 9]。結果是[7, 8, 9]。我的錯誤在哪裏? Jsfiddle for this。謝謝。Lodash懶惰鏈不適合我

var ar = [1, 2, 3, 4, 5, 6], 
    arWrapper = _(ar), 
    removedTypes = [3, 4], 
    addedTypes = [7, 8, 9]; 

_.each(removedTypes, function (removedType) {  
    arWrapper = arWrapper.remove(function (type) { 
     return type === removedType; 
    }); 
}); 
_.each(addedTypes, function (addedType) { 
    arWrapper = arWrapper.push(addedType); 
}); 

console.log("%O", arWrapper.value()); 
+1

'arWrapper.remove'返回一個新的數組。不是Lodash對象。 – cgTag

+0

@MathewFoscarini未鏈時 – zerkms

回答

2

您的解決方案是不是「地道」,因爲它依賴於自由變量在這裏和那裏(而且是「太勢在必行」整體):

的「更好」的解決辦法是:

var result = arWrapper.difference(removedTypes).union(addedTypes); 

的jsfiddle:http://jsfiddle.net/xb90agw2/1/

由於您的解決方案 - 這是行不通的,因爲.remove()回報一個集合中刪除元素,而不是您假設的過濾元素的集合。

+0

謝謝@zerkms。爲簡單起見,我的「解決方案」被縮減了:實際上,我在這裏的每個'.each()'中都需要更多的代碼。 '.difference()'和'.union()'不會幫助。 [Jsfiddle](http://jsfiddle.net/maximmig/xb90agw2/2/) –

+0

[到目前爲止的解決方案](http://jsfiddle.net/maximmig/xb90agw2/3/)。感謝您指出'.remove()'也不會有幫助。 –

+0

@MaximMig它仍然很醜。如果你問得好,我們會幫你寫地道的。目前,在你的代碼中使用lodash沒有任何好處:用普通的'forEach'和'if'來重寫它,它會更好。 – zerkms