如何删除两个数组之一的重复项?

时间:2018-03-13 12:04:14

标签: javascript arrays filter

所以我有两个看起来像这样的数组:

arr 1:

[[Tue Feb 20 09:00:00 GMT+01:00 2018, xxx, cc0902be495c4350a6bfcd1734c843b9, xxx, affiliate, 101723.0, ru, 9e09ee193e21766b1946e485eec9adcf, 0.81, 0.72, 6.05, 0.5265, 0.1053, 0.6318, 3.9325, 0.7865, 4.719, 0.468, 0.0936, 0.5616], [Tue Feb 21 09:00:00 GMT+01:00 2018, xxx, f8875453e5354d88931e3474021f723a, xxx, affiliate, 101723.0, ru, b4cb6e13bc1909b6f04f8cd44b1374d5, 0.5, 0.44, 3.72, 0.325, 0.065, 0.39, 2.418, 0.4836, 2.9016, 0.286, 0.0572, 0.3432],[Tue Feb 22 09:00:00 GMT+01:00 2018, xxx, f8875453e5354d88931e3474021f723a, xxx, affiliate, 101723.0, ru, b4cb6e13bc1909b6f04f8cd44b1374d5, 0.5, 0.44, 3.72, 0.325, 0.065, 0.39, 2.418, 0.4836, 2.9016, 0.286, 0.0572, 0.3432]]

arr 2:

[[Tue Feb 20 09:00:00 GMT+01:00 2018, xxx, cc0902be495c4350a6bfcd1734c843b9, xxx, affiliate, 101723.0, ru, 9e09ee193e21766b1946e485eec9adcf, 0.81, 0.72, 6.05, 0.5265, 0.1053, 0.6318, 3.9325, 0.7865, 4.719, 0.468, 0.0936, 0.5616], [Tue Feb 21 09:00:00 GMT+01:00 2018, xxx, f8875453e5354d88931e3474021f723a, xxx, affiliate, 101723.0, ru, b4cb6e13bc1909b6f04f8cd44b1374d5, 0.5, 0.44, 3.72, 0.325, 0.065, 0.39, 2.418, 0.4836, 2.9016, 0.286, 0.0572, 0.3432],[Tue Feb 22 09:00:00 GMT+01:00 2018, xxx, f8875453e5354d88931e3474021f723a, xxx, affiliate, 101723.0, ru, b4cb6e13bc1909b6f04f8cd44b1374d5, 0.5, 0.44, 3.72, 0.325, 0.065, 0.39, 2.418, 0.4836, 2.9016, 0.286, 0.0572, 0.3432],[Tue Feb 23 09:00:00 GMT+01:00 2018, xxx, f8875453e5354d88931e3474021f723a, xxx, affiliate, 101723.0, ru, b4cb6e13bc1909b6f04f8cd44b1374d5, 0.5, 0.44, 3.72, 0.325, 0.065, 0.39, 2.418, 0.4836, 2.9016, 0.286, 0.0572, 0.3432]]

我想要实现但不知道如何删除 arr 1 中与 arr 2 具有相同日期的条目。 Sp,考虑到上面提供的数据,arr中的所有条目都需要删除,因为它们的日期与 arr 2 中的entrie日期重叠。

我该怎么做?条目号或其他值无关紧要。例如,如果 arr 1 我有10k条目,日期为5月5日,而 arr 2 我有一个条目具有相同的日期,我仍然希望这些10k条目在 arr 1 中删除。

我尝试使用过滤器执行此操作,但由于它是 2d 数组,我认为这根本不是正确的方法。

3 个答案:

答案 0 :(得分:4)

使用mapfilter

arr2

中创建一个包含所有日期的数组
var allArr2Dates = arr2.map( s => s[0] );

然后使用此数组

过滤arr1
arr1 = arr1.filter( s => allArr2Dates.includes( s[0] ) );

ES5等效

var allArr2Dates = arr2.map( function(s){ return s[0]; } );
arr1 = arr1.filter( function(s) { return allArr2Dates.includes( s[0] ); } );

答案 1 :(得分:1)

有可能,混合过滤器和每一个。



let one = [[1, 'aaa'], [2, 'bbb'], [3, '444']];

let second = [[14, 'aaa'], [2, 'bbb'], [6, 'ccc']];

const result = one.filter(data => second.every(dataAux => dataAux[0] !== data[0]));




答案 2 :(得分:1)

可以利用

Map覆盖基于elements的{​​{1}}中的相关key

请参阅下面的实例。



Arrays