从array2 Javascript中存在的array1中删除元素的最佳方法



假设我们有以下JavaScript数组

var array1 = ['Teams' , 'Chat' , 'Zoom' , 'Slack' ] 
var array2 = [ 'Zoom' , 'Chat'] 

如何制作一个新的数组,其中只存在array1中不在array2中的元素?

新阵列应该看起来像

new_array = [ 'Teams' , 'Slack' ]

使用Array#filter()方法:

const newArray = array1.filter(e => !array2.includes(e));

演示

const array1 = ['Teams' , 'Chat' , 'Zoom' , 'Slack' ];
const array2 = [ 'Zoom' , 'Chat'];
const newArray = array1.filter(e => !array2.includes(e));
console.log( newArray );

对于array1中的n元素,在最佳、最差和平均情况下,这将在O(n)时间内运行,因为在Set中的查找发生在O(1)中,并将返回正确的结果。

array1array2中的所有元素不同时,使用Array#includes()将导致array1中的n元素和array2中的m元素的O(n * m)的最坏情况运行时间。即使它们不是,您也平均需要m / 2步骤来使用Array#includes()array2中找到匹配,这仍然会导致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);

最新更新