如何删除数组中的重复项?

时间:2019-09-24 03:37:50

标签: javascript

我有以下物品。我想删除重复的项目并返回数组。我尝试使用Set,但我认为这不是我当前正在使用的Ecma脚本的一部分。我知道这里曾多次问过这个问题,但我似乎无法工作。

  

0:(2)[0,2]

     

1:(2)[0,2]

     

2:(2)[1、2]

     

3:(2)[1、3]

 function checkDuplicate(array: any, obj: any) {
    const exists = array.some((o: any) => o.itemOne === obj.itemOne && o.itemTwo === obj.itemTwo);
    if (exists) {
      return true;
    } else {
      return false;
    }
  }

  function check() {
    const testArray: any = [];
    arrayOne().map((item: any) => {
      arrayTwo().map((item2: any) => {
        if (item.someMatchingValue === item2.someMatchingValue) {
          if (!checkDuplicate(testArray, [item.itemOne, item2.itemTwo])) {
            testArray.push([item.itemOne, item2.itemTwo]);
          }
        }
      });
    });
    console.log(testArray);
    return testArray;
  }

2 个答案:

答案 0 :(得分:4)

您正在使用const compare = (obj1, obj2) => Array.isArray(obj1) ? Array.isArray(obj2) && obj1.length === obj2.length && obj1.every((item, index) => compare(item, obj2[index])) : obj1 instanceof Date ? obj2 instanceof Date && obj1.getDate() === obj2.getDate() : obj1 && typeof obj1 === 'object' ? obj2 && typeof obj2 === 'object' && Object.getOwnPropertyNames(obj1).length === Object.getOwnPropertyNames(obj2).length && Object.getOwnPropertyNames(obj1).every(prop => compare(obj1[prop], obj2[prop])) : obj1 === obj2; const distinct = (array) => array ? array.reduce((results, item) => { if (!results.some(i => compare(i, item))) { results.push(item); } return results; }, []) : array; let array = [[0, 2], [0, 2], [1, 2], [1, 3]]; console.log(distinct(array)); 和其他ES6功能,因此您应该能够使用const就好了。您可能遇到的问题是两个数组与其他数组不相等,因此将您的数组放入Set不会删除内部数组。相反,您可以将数组中的每个内部数组映射到一个字符串,以便随后可以使用Set删除重复项,然后将SetArray.from一起使用来转换{{1 }}的字符串返回数组数组,如下所示:

JSON.parse

答案 1 :(得分:0)

我有这个实用程序函数,用于将数组简化为不同的元素

TimeSeriesSplit

看到要比较的数组,可以使用对象比较实用程序功能对其进行修改

const distinct = (array) =>
  array
    ? array.reduce((results, item) => {
        if (!results.some(i => i === item)) {
          results.push(item);
        }
        return results;
      }, [])
    : array;
    
    
let array = [1 ,1 , 2, 3, 3, 4, 5, 5, 5];
console.log(distinct(array));