假设我们有以下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)
中,并将返回正确的结果。
当array1
和array2
中的所有元素不同时,使用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);