2016-03-23 30 views

回答

1

您可以用Array#some

var arr = [{ a: 1 }, { a: 5 }, { a: 6 }, { a: 11 }, { a: 11 }], 
 
    found = function (array) { 
 
     var index; 
 
     return arr.some(function (a, i) { 
 
      if (a.a === 1 || a.a === 11) { 
 
       index = i; 
 
       return true; 
 
      } 
 
     }) && array[index] || undefined; 
 
    }(arr); 
 

 
document.write('<pre>' + JSON.stringify(found, 0, 4) + '</pre>');

+1

'find'!='filter' – isvforall

+0

@isvforall,日Thnx –

+0

尼娜你的結果仍然是一個數組,但它需要的是通過第一個要素是一個真相測試。 – isvforall

1

對於你的情況最好寫在普通的JavaScript使用find功能。您可以使用它作爲第二個參數傳遞給find方法,並檢查你的兩個條件的功能:

var arr = [{ a: 1 }, { a: 5 }, { a: 6 }, { a: 11 }]; 
 

 
var elem = _.find(arr, function(e) { 
 
    return e.a == 1 || e.a == 11; 
 
}); 
 

 
document.write(JSON.stringify(elem));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>


或者用普通的JavaScript(ES2015):

var arr = [{ a: 1 }, { a: 5 }, { a: 6 }, { a: 11 }]; 
 

 
var elem = arr.find(function(e) { 
 
    return e.a == 1 || e.a == 11; 
 
}); 
 

 
document.write(JSON.stringify(elem));

+0

找不到功能。如果您更改了arr,以使第一個對象類似於{a:77},那麼將由第一個代碼片段返回。 –

+0

@GruffBunny謝謝,你說得對。我會解決這個問題 – isvforall

5

find的行爲就像findWhere,它返回通過搜索條件的第一項。使用find可以使用謂詞來指定搜索條件。

var result = _.find(arr, function(item) { 
    return item.a == 1 || item.a == 11; 
}); 
0

您可以使用_.filter這個

var arr = [{a:1}, {a:5}, {a:6}, {a:11}]; 
_.filter(arr,function(n){return (n.a===1 || n.a===11)}); 

但有一個更好的解決方案,它可以幫助你添加儘可能多的或你想要的。使用_.mixin您可以創建自己的或功能

var arr = [{a:1}, {a:5}, {a:6}, {a:11}]; 
_.mixin({ 
    or: function(obj,arr,condition){ 
    return _.chain(arr).where(condition).union(obj).value(); 
    } 
}); 

_.chain(arr).where({a:1}).or(arr,{a:11}).or(arr,{a:2}).value();//returns 2 objects 
_.chain(arr).where({a:1}).or(arr,{a:11}).or(arr,{a:5}).value();//returns 3 objects 
_.chain(arr).where({a:1}).or(arr,{a:11}).value();//returns 2 objects 

var arr2 = [{a:1,b:4}, {a:5}, {a:6}, {a:11}]; 
_.chain(arr2).where({a:1}).or(arr2,{a:11}).value();//returns 2 objects 
相關問題