यह जांचने का सबसे अच्छा तरीका क्या है कि जावास्क्रिप्ट में दो सरणी समान/बराबर मान (किसी भी क्रम में) हैं या नहीं?

ये मान डेटाबेस संस्थाओं की केवल प्राथमिक कुंजी हैं, इसलिए वे हमेशा अलग रहेंगे

const result = [1, 3, 8, 77]
const same = [8, 3, 1, 77]
const diff = [8, 3, 5, 77]

areValuesTheSame(result, same) // true
areValuesTheSame(result, diff) // false

areValuesTheSame विधि कैसी दिखनी चाहिए?

पी.एस. यह प्रश्न डुप्लिकेट जैसा दिखता है लेकिन मुझे जावास्क्रिप्ट से संबंधित कुछ भी नहीं मिला।

0
Yegor Zaremba 23 जून 2019, 19:47

2 जवाब

सबसे बढ़िया उत्तर

मैं निम्नलिखित धारणाएँ बना रहा हूँ:

  • सरणियों में केवल संख्याएँ होती हैं।
  • आप तत्वों के क्रम की परवाह नहीं करते हैं; सरणियों को पुनर्व्यवस्थित करना ठीक है।

उन शर्तों के तहत हम बस प्रत्येक सरणी को एक कैनोनिकल स्ट्रिंग में सॉर्ट करके और उदा के साथ तत्वों को जोड़कर परिवर्तित कर सकते हैं। एक स्थान। फिर (बहु-) सेट समानता सरल स्ट्रिंग समानता तक उबाल जाती है।

function areValuesTheSame(a, b) {
    return a.sort().join(' ') === b.sort().join(' ');
}

const result = [1, 3, 8, 77];
const same = [8, 3, 1, 77];
const diff = [8, 3, 5, 77];

console.log(areValuesTheSame(result, same));
console.log(areValuesTheSame(result, diff));

यह शायद सबसे आलसी/सबसे छोटा तरीका है।

3
melpomene 23 जून 2019, 17:18

आप Mapके साथ सभी तत्वों की गणना कर सकते हैं (यह टाइप सेव है) एक सरणी के लिए ऊपर और दूसरे के लिए नीचे और जांचें कि क्या सभी वस्तुओं की अंतिम गणना शून्य है।

function haveSameValues(a, b) {
    const count = d => (m, v) => m.set(v, (m.get(v) || 0) + d)
    return Array
        .from(b.reduce(count(-1), a.reduce(count(1), new Map)).values())
        .every(v => v === 0);
}

const result = [1, 3, 8, 77]
const same = [8, 3, 1, 77]
const diff = [8, 3, 5, 77]

console.log(haveSameValues(result, same)); // true
console.log(haveSameValues(result, diff)); // false
2
Nina Scholz 23 जून 2019, 16:55