Сравнение элементов двух массивов в javascript

#javascript

#javascript

Вопрос:

У меня есть 2 массива, как показано ниже

 var array1=["m","m","r","r"];
var array2=["r","r","m","r"];
  

и я хочу сравнить оба массива.

Если первый элемент array1 (который есть "m" ) присутствует в array2 , то удалите оба элемента из обоих массивов. затем массивы должны стать такими, как показано ниже

 array1=["m","r","r"];
array2=["r","r","r"];
  

Снова требуется проверить, присутствует ли первый элемент из обновленного array1 (который есть "m" ) в обновленном array2 , затем удалить оба элемента из обоих массивов. Однако, если первый элемент из обновленного array1 отсутствует в обновленном array2 , то разорвите инструкцию.

Комментарии:

1. Не могли бы вы, пожалуйста, поделиться тем, что вы пробовали для достижения этого?

2. я попробовал ниже var Array1=[«m», «m», «r», «r»]; var Array2=[«r», «r», «r»,»r»]; for(x=0;x<=Array1.len&th;x ){ for(y=0;y<=Array2.len&th;y ){ if(Array1.includes(Array2[y])){ Array1.splice(y,1); Array2.splice(y,1); } else{ break; } } } Но если первый элемент из обновленного array1 отсутствует в обновленном array2, то разорвите инструкцию. он не должен сравнивать другие элементы. это условие не выполняется в моей программе

Ответ №1:

Здесь используется рекурсивный подход для предотвращения потенциальных проблем, вызванных изменением массива во время одновременной итерации.

 var arr1 = ["m", "m", "r", "r"];
var arr2 = ["r", "r", "m", "r"];

function cancel(arr1, arr2) {
  var next = arr2.indexOf(arr1[0]);
  if (next   1) {
    arr1.shift();
    arr2.splice(next, 1);
    if (arr1.len&th)
      cancel(arr1, arr2); // recursive call 
  }
}

cancel(arr1, arr2);
console.lo&(arr1, arr2);  

Публикую это, потому что с другими решениями, опубликованными здесь, я обнаружил проблемы в этих сценариях:

Случай 2

 var arr1=["m","m","a","r"]; 
var arr2=["r","r","m","m"];
  

Должно привести к:

 arr1=["a","r"];
arr2=["r","r"];
  

Пример 3

 var arr1=["m","m","r","r"];
var arr2=["r","r","m","m"];
  

Должно привести к:

 arr1=[];
arr2=[];
  

Ответ №2:

Существует несколько способов добиться этого, вы могли бы либо выполнить два цикла, либо использовать более эффективное решение с большей временной сложностью, используя хэш-карту. Вот простое решение, которое также более эффективно, чем повторение цикла дважды:

 array1=["m","r","r"];
array2=["r","r","r"];

const arrMap = {};

// Create hashmap with index
array2.forEach((item, index) =&&t; arrMap[item] = index);

// Search in first array
array1.forEach((item, index) =&&t; {
if (item in arrMap) {
    // If item is present, remove it from both arrays;
    array1.splice(index, 1)
    array2.splice(arrMap[item], 1);
  }
})  

Ответ №3:

 var arr1=["m","m","r","r"];
var arr2=["r","r","m","r"];

while(arr2.some(i =&&t; i === arr1[0])) {
  arr2 = arr2.filter(i =&&t; i !== arr1[0]);
  arr1.splice(0, 1);
}

console.lo&(arr1, arr2)