2015-04-29 8 views
50

मैं जानता हूँ कि मैं छोरों का उपयोग कर ऐसा कर सकते हैं, लेकिन मैं ऐसा करने का एक सुंदर तरीका खोजने की कोशिश कर रहा हूँ:lodash का उपयोग कर की तुलना करने के सरणियों (आदेश के बिना आइटम अस्तित्व)

var array1 = [['a', 'b'], ['b', 'c']]; 
var array2 = [['b', 'c'], ['a', 'b']]; 
: मैं दो सरणियों है

मैं यह पुष्टि करने के लिए लॉनाश का उपयोग करना चाहता हूं कि दोनों समान हैं। 'वही' से मेरा मतलब है कि array1 में कोई आइटम नहीं है जो array2 में निहित नहीं है।

इन वस्तुओं के बीच समानता की जाँच के संदर्भ में:

['a', 'b'] == ['b', 'a'] 

या

['a', 'b'] == ['a', 'b'] 

दोनों काम पत्र के बाद से हमेशा के क्रम में हो जाएगा।

अग्रिम धन्यवाद।

उत्तर

90

यदि आप बाहरी सरणी को सॉर्ट करते हैं, तो आप _.isEqual() का उपयोग कर सकते हैं क्योंकि आंतरिक सरणी पहले ही सॉर्ट हो चुकी है।

var array1 = [['a', 'b'], ['b', 'c']]; 
var array2 = [['b', 'c'], ['a', 'b']]; 
_.isEqual(array1.sort(), array2.sort()); //true 

ध्यान दें कि .sort() सरणी को म्यूटेट करेगा। यदि यह आपके लिए एक समस्या है, तो पहले उपयोग करें (उदाहरण के लिए) .slice() या स्प्रेड ऑपरेटर (...)।

+3

ध्यान रखें कि array.sort() मूल सरणी को म्यूट कर रहा है। शायद यह बेहतर हो सकता है: var array1 = [['a', 'b'], ['b', 'c']]; var array2 = [['b', 'c'], ['a', 'b']]; _.isEqual ([... array1] .sort(), [... array2] .sort()); // true –

+2

दो वाक्यों को नोट किया गया है कि '.sort()' उपयोगकर्ता की समस्या होने पर पहले प्रतिलिपि बनाने के विकल्प को संशोधित करता है और सुझाव देता है। – Trott

5

'उसी' से मेरा मतलब है कि array1 में कोई आइटम नहीं है जो array2 में निहित नहीं है।

यदि आप अगर वहाँ array2 में आइटम कि नहींarray1 में हैं परवाह नहीं है समतल() और अंतर() इस बात के लिए है, जो अच्छी तरह से काम करता है इस्तेमाल कर सकते हैं। ऐसा लगता है कि आप पूछ रहे हैं array1 array2 का सबसेट है?

var array1 = [['a', 'b'], ['b', 'c']]; 
var array2 = [['b', 'c'], ['a', 'b']]; 

function isSubset(source, target) { 
    return !_.difference(_.flatten(source), _.flatten(target)).length; 
} 

isSubset(array1, array2); // → true 
array1.push('d'); 
isSubset(array1, array2); // → false 
isSubset(array2, array1); // → true 
-1

हम _.difference फ़ंक्शन का उपयोग यह देखने के लिए कर सकते हैं कि कोई अंतर है या नहीं।

function isSame(arrayOne, arrayTwo) { 
    var a = arrayOne, 
     b = arrayTwo; 

    if (arrayOne.length <= arrayTwo.length) { 
     a = arrayTwo; 
     b = arrayOne; 
    } 
    return _.isEmpty(_.difference(a.sort(), b.sort())); 
} 

// examples 
console.log(isSame([1, 2, 3], [1, 2, 3])); // true 
console.log(isSame([1, 2, 4], [1, 2, 3])); // false 
console.log(isSame([1, 2], [2, 3, 1])); // false 
console.log(isSame([2, 3, 1], [1, 2])); // false 

मुझे आशा है कि यह आपकी मदद करेगा।

+3

गलत, आपके फ़ंक्शन को 'console.log (isSame ([1,2], [2,3,1]) के लिए' true' मिलेगा); ' – DavidLin

+1

इसे इंगित करने के लिए @ डेविड लिन धन्यवाद। मैंने उस मामले पर विचार करने के लिए बदलाव किए हैं। धन्यवाद और असुविधा के लिए खेद है। – Amitesh

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