Home > Back-end >  How to filter array by array using javascript with duplicate key
How to filter array by array using javascript with duplicate key

Time:06-29

I have 2 array and i will filtered but key duplicate.

const arr1 = [1, 2, 3, 3, 3, 4];
const arr2 = [1, 3];

function filteredArray(arr1, arr2) {...}

const newArr = filteredArray(arr1, arr2);

console.log(newArr);

// result: [2, 3, 3, 4];

CodePudding user response:

You can check the below implementation. We should not modify the original data as well, that's why I've cloned your array for the array modification instead of changing items on the original one.

const arr1 = [1, 2, 3, 3, 3, 4];
const arr2 = [1, 3];

function filteredArray(arr1, arr2) {
  const newArr1 = [...arr1] //clone the array to keep the original array data
  const set2 = new Set(arr2)
  for(let i = 0; i < newArr1.length; i  ) {
     if(set2.has(newArr1[i])) {
        set2.delete(newArr1[i])
        newArr1.splice(i,1)
     }
  }
  return newArr1
}

const newArr = filteredArray(arr1, arr2);

console.log(newArr);

CodePudding user response:

You can iterate over arr2, removing its values from arr1 if they exist:

const arr1 = [1, 2, 3, 3, 3, 4];
const arr2 = [1, 3];

function filteredArray(arr1, arr2) {
  arr2.forEach(v => {
    i = arr1.indexOf(v);
    if (i >= 0) arr1.splice(i, 1)
  });
  return arr1;
}

console.log(filteredArray(arr1, arr2))

CodePudding user response:

Use set and filter

function filteredArray(arr1, arr2) {
  const set = new Set(arr2);
  return arr1.filter(item => !set.delete(item));
}

const arr1 = [1, 2, 3, 3, 3, 4];
const arr2 = [1, 3];

console.log(filteredArray(arr1, arr2));

  • Related