0

Here's a sample of the problem I'm having in JavaScript:

first array [1, 2, 3, 4, 5, 6, 7]

second array [7, 8, 9, 4, 2, 5, 7]

In this case, I need to be able to find and eliminate "4" and "7" from both arrays, eliminating both. This is based on their location and matching value.

I haven't been able to find anything other than eliminating matching values. In this case, however, the values must be in the same place and also be matching.

I've tried this so far:

function findCommonElements3(array1, array2) { 
  return arr1.some(item => arr2.includes(item)) 
} 

it looks like it only looks for matching elements, whereas I need to find matching corresponding elements and then remove them.

Community
  • 1
  • 1
coder
  • 1
  • 2
  • Please specify the language you are working with and most importantly show us what have you tried so far. – Sebastian Kaczmarek Feb 05 '20 at 18:48
  • 1
    Does this answer your question? [How do I remove a particular element from an array in JavaScript?](https://stackoverflow.com/questions/5767325/how-do-i-remove-a-particular-element-from-an-array-in-javascript) – Michelangelo Feb 05 '20 at 20:09
  • If it is in the same place then it is even easier. You can just use the index. – Michelangelo Feb 05 '20 at 20:10

3 Answers3

1

As mentioned in the comments, you may use the splice method to remove one or more elements of an array in JavaScript. First of all I would store the indexes of the elements I should remove looping the array as so:

const array1 = [1, 2, 3, 4, 5, 6, 7];
const array2 = [7, 8, 9, 4, 2, 5, 7];

//Indexes of same elements
var sameIndexes = [];

function findSameIndexes(element, index) {
  if (array1[index] == array2[index]) {
    sameIndexes.push(index);
  }
}

array1.forEach(findSameIndexes);

Calling console.log(sameIndexes) should give this result:

Array [3, 6]

The problem is that if you loop again the array and remove the elements in that order, the indexes would not correspond to the elements anymore.

For example if you remove the 3rd element, the number 7 wouldn't be at index 6 anymore, to solve this issue I'd use the reverse method so you won't lose track of the indexes

// A simple function to remove the elements in both arrays
function removeElements(index) {
  array1.splice(index,1);
  array2.splice(index,1);
}

sameIndexes.reverse().forEach(removeElements);

And the final results would be

Array [1, 2, 3, 5, 6]
Array [7, 8, 9, 2, 5]

Which hopefully is what you were looking for, of course there are better ways to write it down, but maybe this will help you find a solution.

Effe
  • 33
  • 1
  • 7
0

You could just use a for loop and use index. something like this

const firstarray = [1, 2, 3, 4, 5, 6, 7]
const secondarray = [7, 8, 9, 4, 2, 5, 7]

for (let i = 0; i <= firstarray.length - 1; i++) {
  if (firstarray[i] === secondarray[i]) {
    console.log(`found ${firstarray[i]} at index ${i}`);
    firstarray.splice(i, 1);
    secondarray.splice(i, 1);
  }
}

console.log(firstarray, secondarray);
Ashish Modi
  • 6,282
  • 2
  • 14
  • 26
0

const excludeCommon = (ar1, ar2) => {
 const both = [...ar1, ...ar2].filter((v, i, ar) => v !== ar[i +  (2 * (i < ar1.length) - 1) * ar1.length]);
 return [both.slice(0, both.length / 2), both.slice(both.length / 2)];
}
console.log(excludeCommon([1, 2, 3, 4, 5, 6, 7], [7, 8, 9, 4, 2, 5, 7]));
pank
  • 132
  • 1
  • 3