सरणी की मनमानी संख्या की सरणी की तुलना करने के लिए एक अच्छा एल्गोरिदम क्या है। इंटरनेट पर 2 सरणियों की तुलना करने के लिए बहुत सारी चीज़ें हैं लेकिन सरणी की मनमानी संख्या के लिए नहीं। उदाहरण के लिए, सरणियों की निम्नलिखित सरणी

[ [5, 10, 15, 20], [15, 88, 1, 5, 7], [1, 10, 15, 5, 20] ]

मैंने निम्नलिखित कोड की कोशिश की यह काम नहीं करता है। अवधारणात्मक रूप से समझने की कोशिश कर रहा हूं कि मुझे इसके बारे में कैसे जाना चाहिए।

function compareTwoArrays(a, b) {
  let output = [];
  if (a.length <= b.length) {
    for (let i = 0; i < a.length; i++) {
       for (let j = 0; j < b.length; j++) {
         if (a[i] === b[j]) {
           output.push(a[i]);
         }
       }
    }
  } else {
    for (let i = 0; i < b.length; i++) {
       for (let j = 0; j < a.length; j++) {
         if (b[i] === a[j]) {
           output.push(b[i]);
         }
       }
    }
  }
  return output;
}

function intersection(arr) {
  let output = [];
  for (let i = 1; i < arr.length; i++) {
    for (let j = 0; j < arr[i].length; j++) {
      if (arr[i][j].contains(arr[0][j])) {
        console.log(arr[i][j]);
      }
    }
  }

}
const arr1 = [5, 10, 15, 20];
const arr2 = [15, 88, 1, 5, 7];
const arr3 = [1, 10, 15, 5, 20];
console.log(intersection([arr1, arr2, arr3])); 
-1
larry8989 14 जून 2020, 15:40

1 उत्तर

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

यदि आपके पास दो सरणियों के प्रतिच्छेदन के लिए एक सही एल्गोरिथ्म है (इसे intersect कहते हैं) तो आप दो से अधिक सरणियों का प्रतिच्छेदन प्राप्त करने के लिए आसानी से इस फ़ंक्शन का उपयोग कर सकते हैं। बस पहले दो का चौराहा लें। फिर उस परिणाम के प्रतिच्छेदन को तीसरे सरणी के साथ लें। फिर उस परिणाम का उपयोग चौथे सरणी, ... आदि के साथ एक चौराहे के लिए करें। यह आमतौर पर एक reducer करता है:

// Let's assume you have a correct pair-wise intersect function. 
//    It could be this one, or any other correct implementation:
function intersect(a, b) {
  return a.filter(function (v) {
    return this.has(v);
  }, new Set(b));
}

// ...then you only need this to generalise it:
const multiIntersect = arrays => arrays.reduce(intersect);

// Demo
const arr1 = [5, 10, 15, 20];
const arr2 = [15, 88, 1, 5, 7];
const arr3 = [1, 10, 15, 5, 20];
console.log(multiIntersect([arr1, arr2, arr3])); 
3
trincot 14 जून 2020, 13:01