JS如何在不给新空间的情况下给数组去重?

Posted onebox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS如何在不给新空间的情况下给数组去重?相关的知识,希望对你有一定的参考价值。

1、先排序,在让相邻元素对比去重

  const nums = [3, 1, 1, 5, 2, 3, 4, 3, 5, 5, 6, 4, 6, 6, 6];
  Array.prototype.arrayNorepeat = function () {
    let arr = this;
    let len = arr.length - 1;
    let i = 0;
    //先给数组排序
    for (; i < len; ++i) {
      let j = 0;
      for (; j < len - i; ++j) {
        if (arr[j] > arr[j + 1]) {
          arr[j] = arr[j] + arr[j + 1];
          arr[j + 1] = arr[j] - arr[j + 1];
          arr[j] = arr[j] - arr[j + 1];
        }
      }
    }
    //对数组进行去重
    for (i = 0; i < arr.length; ++i) {
      if (arr[i] === arr[i + 1]) {
        arr.splice(i, 1);
        //一旦相邻两个元素相等,外层循环的初始值从0开始
        i = -1;
      }
    }
    return arr;
  }
  console.log(nums.arrayNorepeat());

2、直接去重(排序方式是按照初始的排序方式)

  const nums = [3, 1, 1, 5, 2, 3, 4, 3, 5, 5, 6, 4, 6, 6, 6];
  Array.prototype.arrayNorepeat = function () {
    let arr = this;
    let i = 0;
    for (; i < arr.length; ++i) {
      let j = 0;
      for (; j < arr.length; ++j) {
        if (i != j) {
          if (arr[i] === arr[j]) {
            //如果你想保留最后一个重复的数字,把splice方法的j改成i就可以了
            arr.splice(j, 1);
            //一旦相邻两个元素相等,外层循环的初始值从0开始
            i = -1;
          }
        }
      }
    }
    return arr;
  }
  console.log(nums.arrayNorepeat());

 

以上是关于JS如何在不给新空间的情况下给数组去重?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不拆风扇的情况下给CPU风扇加油

python 装饰器

Java—Remove Deplicates from Sorted Array(顺序数组中去重位置)

如何在不单击的情况下显示片段

NODE.JS 如何在不填满存储空间的情况下保存 JSON 数据 [关闭]

如何在不与 MainActivity 交互的情况下从通知中打开片段页面?