2012-04-25 54 views
2
_.filter(this.pluck(key),function(item){ 
    return item ? value.toLowerCase() === item.toLowerCase() : false; 
    }); 

如果回調的返回值爲true,有沒有辦法停止過濾器迭代?突破_.filter()

+0

不清楚:這段代碼的上下文是什麼?過濾後的數據是否會被使用,或只應該被測試是否存在某些值?什麼是使用'filter()'並想在某些情況下打破的原因? - 是的,這個Q是「老」,但用戶仍然可能會偶然發現。 – 2016-03-27 09:12:39

回答

2

我發現這可以用any(又名some)來完成:

_.any(this.pluck(key),function(item){ 
     return item ? value.toLowerCase() === item.toLowerCase() : false; 
     }); 
+3

因爲梯形圖將返回一個匹配的數組,而第一個返回true/false,所以'any()'不是可替換['filter()'](http://underscorejs.org/#filter)如果你最初的意圖是檢查_if_集合包含某些值,那麼any()將會很好,否則,如果你想使用過濾的數據,any()不是正確的。我會相應地使用'for' /'while'循環和'break'。 – 2016-03-27 09:05:40

1

這種糟糕 - 但最好的辦法似乎是處理你的DS樣(或轉換成)一個數組,並迭代一個for環回或等同於break;條件。

請看Downvote AND awnser的追求。如果這是錯誤的。 ;)