2013-01-02 43 views
25

इस तरह के तर्क प्रदान करने के लिए सबसे अच्छा (साफ) तरीका क्या है?यदि कोई सरणी दूसरे का उप-समूह है तो मैं कैसे परीक्षण करूं?

var colors = ["red","white","blue"]; 

logic(colors,["red","green"]); //false 
logic(colors,["red"]); //true 
logic(colors,["red","purple"]); //false 
logic(colors,["red","white"]); //true 
logic(colors,["red","white","blue"]); //true 
logic(colors,["red","white","blue","green"]); //false 
logic(colors,["orange"]); //false 

संभवतः underscore.js का उपयोग कर?

_(hand).difference(colors).length === 0 
+4

... ... ... क्या? – Shmiddty

+0

संभावित डुप्लिकेट: http://stackoverflow.com/q/3115982/561731 – Neal

+3

ऐसा लगता है कि वह यह निर्धारित करने का प्रयास कर रहा है कि दिए गए सरणी में केवल 'रंग' सरणी के तत्व हैं या नहीं। – MrZander

उत्तर

36

सरणी में प्रत्येक तत्व मान लिया जाये कि अद्वितीय है:: दोनों सरणियों के चौराहे की लंबाई के साथ hand की लंबाई की तुलना करें

+0

धन्यवाद, कोई फर्क नहीं पड़ता कि मैं अंडरस्कोर दस्तावेज़ों को कितनी बार पढ़ता हूं, जब भी मुझे उनकी आवश्यकता होती है तो मैं शायद ही कभी इन समाधानों के बारे में सोच सकता हूं। – ThomasReggi

+1

जैसा कि आप कहते हैं कि यह काम नहीं कर रहा है अगर लीमेंट अद्वितीय नहीं हैं और यदि आप ऑर्डर जांचना चाहते हैं तो यह भी काम नहीं करता है: मैंने इसे इन आवश्यकताओं के साथ हल करने के लिए बनाया है: https://gist.github.com/timaschew/891632094c8bfcb73c38 – timaschew

+0

_.difference (सबसेट, सुपरसेट)। लम्बाई === 0 –

17

शायद difference आप के लिए क्या देख रहे है। यदि वे समान हैं, तो hand में सभी तत्व colors में भी हैं।

var result = (hand.length === _.intersection(hand, colors).length); 

DEMO

+2

यह '_ (हाथ) होना चाहिए। डिफरेंस (रंग)। लम्बाई === 0;': http://jsfiddle.net/GXGun/1/ (आपको इसके विपरीत मिल गया है;))। हालांकि अच्छा समाधान! –

+1

@ फ़ेलिक्सक्लिंग धन्यवाद! फिक्स्ड :) –

+0

'वापसी! _ (हाथ)। डिफरेंस (रंग)। लम्बाई' –