# 数组去重

# 数组去重

function array_unique (arr) {
  let len = arr.length
  if (!len) {
      return [];
  }
  let tmp = [];
  for (let i = 0; i < len; i++) {
      // 判断数组arr的元素是否在数组tmp中
      if (tmp.findIndex((v) => JSON.stringify(v) === JSON.stringify(arr[i])) === -1) {
        tmp.push(arr[i]);
      }
  }
  return tmp;
}
let arr = [1, 2, 3, '1', 2, undefined, undefined,  'undefined', NaN, NaN, {}, {}, {a: 1}, {a: 1}];
let newArr = array_unique(arr);
console.log(newArr); // [1, 2, 3, '1', undefined, 'undefined', NaN, {}, {a: 1}]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 获取数组 重复元素 出现的位置

/**
 * 获取数组 重复元素 出现的位置
 * @param {Array<string>} arr 
 */
getArrRepeatIndex(arr) {
  let rePoint = {}; // 记录重复项 第一次出现的位置(key) 及 其他重复的位置(value[])
  arr.forEach((point, index) => {
    if(point === true) return; // 跳过 已经判断过的元素
    let resultArr = [];
    let searchArr = arr.slice(index+1); // 截取 剩余的元素 做判断
    searchArr.forEach((item, idx)=> {
      if (point === item) {
        resultArr.push(index+1+idx); // 记录 重复项 在 arr 的位置
        arr[index+1+idx] = true; // 重复的元素 做标记
      }
    });
    // 长度大于 0 ,记录重复元素
    if (resultArr.length > 0) {
      rePoint[index] = resultArr;
    }
  });
  return rePoint;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
上次更新: 2022-11-29 16:59:20(UTC +8)