var arr = [{a:1},{a:5}, {a:6},{a:11}];
我想用下劃線找到其中函數來檢索對象滿足條件a = 1
或a =11
像對象的數組:
_findWhere(arr, {a:1} || {a:11})
這樣的事情是否可能?
var arr = [{a:1},{a:5}, {a:6},{a:11}];
我想用下劃線找到其中函數來檢索對象滿足條件a = 1
或a =11
像對象的數組:
_findWhere(arr, {a:1} || {a:11})
這樣的事情是否可能?
您可以用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>');
對於你的情況最好寫在普通的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));
找不到功能。如果您更改了arr,以使第一個對象類似於{a:77},那麼將由第一個代碼片段返回。 –
@GruffBunny謝謝,你說得對。我會解決這個問題 – isvforall
find的行爲就像findWhere,它返回通過搜索條件的第一項。使用find可以使用謂詞來指定搜索條件。
var result = _.find(arr, function(item) {
return item.a == 1 || item.a == 11;
});
您可以使用_.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
'find'!='filter' – isvforall
@isvforall,日Thnx –
尼娜你的結果仍然是一個數組,但它需要的是通過第一個要素是一個真相測試。 – isvforall