2012-06-27 22 views
0
// Why doesn't this: 
_.invoke(['D','C'], 'lastIndexOf', ['A','B','C']) 

// Return this: 
[-1,2]? 

我有一個字符串。 (輸入)使用Underscore.js調用lastIndexOf

'ABC'

分割成一個數組。 (INPUTBUFFER)

[ 'A', 'B', 'C']

我也得到了與任意字符陣列。 (TriggerChars)

[ 'd', 'E']

我要檢查在INPUTBUFFER的最後一個項目,看看是否匹配任何TriggerChars的。

我想要在InputBuffer中獲得兩個TriggerChars的最後一次出現。

_.invoke(['D','E'], 'lastIndexOf', ['A','B','C']); 
// Returns [-1,-1] since C isn't D or E. 


_.invoke(['D','C'], 'lastIndexOf', ['A','B','C']); 
// Why doesn't this return [-1,2] 

_.lastIndexOf(['A','B','C'],'D') == -1 
_.lastIndexOf(['A','B','C'],'C') == 2 

什麼是我沒有與調用? http://underscorejs.org/#invoke

+0

外貌對我來說,似乎下劃線不會遍歷數組,而是將其視爲「單一」參數?你的'_.invoke(['D','E'],'lastIndexOf',['A','B','C']);'也可能是錯誤的。 – m90

回答

1

你需要的是:

_.map(['D', 'C'], function (x) { return _.lastIndexOf(['A', 'B', 'C'], x)}) 
2
var InputBuffer = ["A","B","C"]; 
var TriggerChars = ["D","E"]; 

_.indexOf(TriggerChars, InputBuffer[InputBuffer.length-1]) > -1; 

則計算結果爲true如果這樣的:我要檢查在INPUTBUFFER的最後一個項目,看看是否匹配任何TriggerChars的。

+0

Oups!我的意思是寫一個東西,寫一些非常不同的東西。抱歉!我想要在InputBuffer中獲得兩個TriggerChars的最後一次出現。 – janjarfalk

1
var inputBuffer = ["A","B","C"]; 
var triggerChars = ["D","E"]; 

triggerChars.indexOf(inputBuffer[inputBuffer.length-1]) > -1 

或只跳過下劃線,上面除了依賴完全相同的解決方案,

確定我更新它小有一點

var inputBuffer = ["A","B","C"]; 
var triggerChars = ["D","C"]; 

var index = []; 

for(var i = 0; i < triggerChars.length; i++){ 
    index.push(inputBuffer.lastIndexOf(triggerChars[i])); 
} 

console.log(index); 

-> [-1,2] 
+0

我很抱歉。我的意思是寫一件事並寫下其他的東西。我想要在InputBuffer中獲得兩個TriggerChars的最後一次出現。 – janjarfalk

+0

@janjarfalk更新了它 – skyw00lker

+0

謝謝!因爲我已經在項目中使用了它,所以我會使用它的下劃線版本。 – janjarfalk