【问题标题】:How to remove duplicates in one of two arrays?如何删除两个数组之一中的重复项?
【发布时间】:2018-03-13 12:04:14
【问题描述】:

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

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 中的条目日期重叠。

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

我尝试使用过滤器来做到这一点,但由于它是一个 2d 数组,我认为这根本不是正确的方法。

【问题讨论】:

  • 您仅根据日期执行检查??还是其他领域?

标签: javascript arrays filter


【解决方案1】:

使用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] ); } );

【讨论】:

  • 您好,感谢您的回复。实际上我忘了说我是在 ECMASCRIPT 5 下做的。你介意写 EC5 版本吗?
  • 感谢编辑!我收到此错误:TypeError: Cannot find function includes in object Tue Feb 20 2018 09:00:00 GMT+0100 (CET) 你知道这是为什么吗?
  • 改用indexOf
【解决方案2】:

这是可能的,混合过滤器和每个。

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]));

【讨论】:

    【解决方案3】:

    Map 可用于覆盖基于keyArrays 中的相关elements

    请参阅下面的实际示例。

    // Input.
    const array1 = [['Tue Feb 20 09:00:00 GMT+01:00 2018', 'A1'], ['Tue Feb 21 09:00:00 GMT+01:00 2018', 'A1'],['Tue Feb 22 09:00:00 GMT+01:00 2018', 'A1']]
    const array2 = [['Tue Feb 20 09:00:00 GMT+01:00 2018', 'A2'], ['Tue Feb 21 09:00:00 GMT+01:00 2018', 'A2'],['Tue Feb 22 09:00:00 GMT+01:00 2018', 'A2'],['Tue Feb 23 09:00:00 GMT+01:00 2018', 'A2']]
    
    // Output.
    const output = [...new Map([...array1, ...array2].map(day => [day[0], day])).values()]
    
    // Log.
    console.log(output)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 2010-12-07
      相关资源
      最近更新 更多