2011-12-21 21 views
9

से मेल खाता है मैं दो सरणियों है:Coffeescript: सरणी तत्व एक और सरणी

array1 = ["hello","two","three"] 
array2 = ["hello"] 

मैं array2 1 या अधिक array1 शब्द हैं अगर जाँच करना चाहते हैं।

मैं कॉफ़ीस्क्रिप्ट का उपयोग करके ऐसा कैसे कर सकता हूं?

उत्तर

12

इस कॉफीस्क्रिप्ट chapter का उपयोग करके दो सरणी के बीच छेड़छाड़ की जांच करने का एक तरीका मिला। कॉफीस्क्रिप्ट इस पर बहुत बढ़िया लग रहा है।

यदि तत्वों के चौराहे के बाद उत्पन्न सरणी में कम से कम एक आइटम होता है, तो दोनों सरणी में सामान्य तत्व होते हैं।

intersection = (a, b) -> 
    [a, b] = [b, a] if a.length > b.length 
    value for value in a when value in b 

x = ["hello", "two", "three"] 
y = ["hello"] 

intersection x, y // ["hello"] 

इसे here आज़माएं।

+0

हममम, मैं काफी पहली पंक्ति से उलझन में हूँ, और CoffeeScript के मुख्य लाभ में से एक था जेएस की स्पष्टता और पठनीयता में वृद्धि की जानी चाहिए, है ना? शायद यह कुछ कोड का मामला है जो चालाक-जटिल है, और इसका उपयोग केवल तभी किया जाना चाहिए जब यह वास्तव में अधिक कुशल है कि @alessioalex की स्पष्ट कोड प्रदान की गई है। – GregL

+0

@ ग्रेगेल - क्या आपका मतलब यह लाइन है - 'चौराहे = (ए, बी) -> '? – Anurag

+0

क्षमा करें, नहीं, मेरा मतलब रेखा # 2 है, जो चौराहे समारोह की पहली पंक्ति है। मैंने पहली पंक्ति को पढ़ने में सक्षम होने के लिए अभी तक पर्याप्त सीएस वाक्यविन्यास सीखा है। :-) यह और भी है कि मुझे समझ में नहीं आता कि यह पंक्ति "काम करती है"। – GregL

1

मैं अपने उदाहरण पर नजर एक समारोह is_in कर दिया है,:

array1 = ["hello","two","three"] 
array2 = ["hello"] 

is_in = (array1, array2) -> 
    for i in array2 
    for j in array1 
     if i is j then return true 

console.log is_in(array1, array2) 

Test here

चौराहे उदाहरण पर एक नज़र होने के बाद, मैं किसी अन्य तरीके से इस लक्ष्य को हासिल कर सकते हैं:

intersection = (a, b) -> 
    [a, b] = [b, a] if a.length > b.length 
    return true for value in a when value in b 

array1 = ["hello","two","three"] 
array2 = ["hello"] 

console.log intersection(array1, array2) 

Test here

+0

पूर्व को समझना बहुत आसान है - अगर कोई दूसरा पोस्ट करने वाले चौराहे कोड के लिए कोई लाभ होता है तो यह देखने के लिए कोई jsPerf.com परीक्षण बनाना चाहता था, तो मैं उत्सुक होगा। – GregL

+0

आप स्वयं जेएसपीआरएफ परीक्षण बना सकते हैं। दो 'टेस्ट टेस्ट' लिंक पर क्लिक करें और फिर वहां से संकलित जावास्क्रिप्ट कोड लें। उसके बाद 2 मामलों के साथ एक जेएसपीआरएफ बनाएँ। – alessioalex

1

आप कोशिश कर सकते हैं:

(true for value in array1 when value in array2).length > 0 
2
contains = (item for item in array2 when item in array1) 

(सरणियों रिवर्स array1 में डबल प्रविष्टियों को दिखाने के लिए)

7

सोचा मैं फेंक अपने ही coffeescript एक लाइनर पागलपन :-P

true in (val in array1 for val in array2) 
1

बस मामले में किसी को यहां आता है और चौराहे के विपरीत अंतर की तलाश कर रहा है

difference = (val for val in array1 when val not in array2) 

यह आपको एक सरणी दे देंगे array1 में (अंतर) सभी मानों का लेकिन में नहीं array2

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