Let's say we have the following JavaScript array
var array1 = ['Teams' , 'Chat' , 'Zoom' , 'Slack' ]
var array2 = [ 'Zoom' , 'Chat']
How to make a new array in which only those elements of array1 present which are not in array2?
New Array should look like
new_array = [ 'Teams' , 'Slack' ]
CodePudding user response:
Use Array#filter() method:
const newArray = array1.filter(e => !array2.includes(e));
DEMO
const array1 = ['Teams' , 'Chat' , 'Zoom' , 'Slack' ];
const array2 = [ 'Zoom' , 'Chat'];
const newArray = array1.filter(e => !array2.includes(e));
console.log( newArray );
CodePudding user response:
This will run in O(n) time in best, worst and average case for n elements in array1 as the lookup in the Set happens in O(1) and will return the correct result.
Using Array#includes() will result in a worst case runtime of O(n * m) for n elements in array1 and m elements in array2 when all elements in array1 and array2 are different. And even if they are not you would on average need m / 2 steps to find a match in array2 using Array#includes(), which would still result in an average case runtime of O(n * m).
const array1 = ['Teams' , 'Chat' , 'Zoom' , 'Slack' ]
const array2 = [ 'Zoom' , 'Chat']
// Create a Set for lookups in O(1); Creation will take O(n).
const array2Set = new Set(array2);
// Only return elements that are not in the Set in O(n)
const newArray = array1.filter(item => !array2Set.has(item))
// print result
console.log(newArray);
