2013-01-08 16 views
21

मैं इसUnderscorejs के साथ, कैसे पता लगाएं कि किसी सरणी में कोई अन्य सरणी है या नहीं?

var matches = bookmarks.filter(function(x) { 
    return _.contains(x.get("tags"), 'apple'); 
}); 

कौन सा बुकमार्क वस्तुओं है कि सेब टैग

मैं बजाय खींचने के लिए वहाँ एक सरणी रखना चाहते हैं और सभी बुकमार्क है कि मिलान मूल्यों वापस आ जाएगी, इस के समान है

var matches = bookmarks.filter(function(x) { 
    return _.contains(x.get("tags"), ['apple','orange']); 
}); 

यह काम करने के लिए किसी भी तरह से काम नहीं करता है?

संपादित करें: मैं माफी चाहता, बुकमार्क्स एक संग्रह और im मॉडल टैग एक स्ट्रिंग है सेब और संतरे का टैग

+0

असंबद्ध ... आप अंडरस्कोर और देशी सरणी प्रसंस्करण विधियों को क्यों मिश्रित कर रहे हैं? 'Array.filter' और '_.contains'। क्या आपको '_.filter' का उपयोग नहीं करना चाहिए? –

+0

@ जोसेफ सिल्बर आह, मुझे '_()' के बारे में पता नहीं था, मैंने वास्तव में अंडरस्कोर का उपयोग नहीं किया है, हालांकि –

+0

शीर्षक मुझे कोई समझ नहीं आता है – glyph

उत्तर

25

है कि वापस जाने के लिए कोशिश कर रहा है, अपने कोड यह होगा

return _.indexOf(x.get("tags"), ['apple','orange']) > -1; 
indexOf साथ

उदाहरण: jsFiddle

तो टैग एक सरणी है, तो आप चौराहे

उपयोग कर सकते हैं चौराहे के साथ
return _.intersection(['apple','orange'], x.get("tags")).length > 0; 

उदाहरण: jsFiddle

+0

हाय कृपया संपादन पर एक नज़र डालें, मैं कुछ विवरण भूल गया। माफ़ कीजिये। –

+0

तो "टैग" एक ऐरे है? – epascarello

+0

हां टैग एक सरणी है और मैं उस ऑब्जेक्ट को वापस करने की कोशिश कर रहा हूं जिसमें उस सरणी के मान हैं –

5

उस अंडरस्कोर में के लिए एक समारोह होने के लिए प्रतीत नहीं होता। हालांकि, आप इसे पूरा करने के लिए अन्य कार्यों को आसानी से जोड़ सकते हैं:

_.mixin({ 
    containsAny: function(arr, values) { 
    // at least one (.some) of the values should be in the array (.contains) 
    return _.some(values, function(value) { 
     return _.contains(arr, value); 
    }); 
    } 
}); 
+0

के लिए परीक्षण करने की कोई आवश्यकता नहीं है हाय कृपया संपादन पर एक नज़र डालें, मैं कुछ विवरण भूल गया। माफ़ कीजिये। –

संबंधित मुद्दे