首页 > 试题广场 >

数组去重

1  forEach  截取掉与前一个相同的元素
var arr = [3, 2, 5, 4, 6, 9, 4, 3];

var sortArr = arr.sort();
 
sortArr.forEach((item, index)=>{
  if(index - 1 >= 0 && item == sortArr[index - 1]){
    sortArr.splice(index, 1);   
  }
})
2  ES6 Set去重;Array.from(new Set(array))

编辑于 2022-06-21 15:51:51 回复(0)

方法有很多种,举几个例子吧,个人感觉没有标准答案,只要思路开阔,方法可以有很多种

1. 先借助sort排序,排序后将每个元素和它的下一个元素做对比,相同则把前一个或后一个借助splice将其删掉

2. 借助冒泡的思想,将每个元素和它后面的元素依次做对比,相同了则把后面的那个相同的删了

3. 借助一个新数组,每次在老数组中取出一个元素,和新数组的元素借助includes方法比较是已存在,不存在就把元素存进新数组

4. 借助filtet遍历数组,利用indexOf判断该元素第一次出现时的下标和当前下标是否相同,相同则返回,不同就表示前面出现过(filter会将符合条件的元素组成一个新的数组)

5. 将上一种方法做一下更改,可以借助lastIndexOf对比当前元素下标和最后一次出现的下标,不一样就表示后面还会出现,就可以把后面相同的那个给删掉,然后再次对比,如果还不一样就表示还存在,就接着删掉,直到相同为止

编辑于 2021-05-09 11:46:10 回复(0)
Object 键值对去重,
  1. //将数组转换成对象
  2. 将对象转为数组,for in
发表于 2022-01-25 16:31:41 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 3, 3, 3, 4, 4, 3, 3, 2};

        int left = 0, right = arr.length - 1;
        int mid = -1;
        int lastLeft = -1;
        int lastRight = -1;
        int lastLeftRepeat = -1;
        int lastRightRepeat = -1;

        while (left < right) {
            int curLeft = arr[left];
            int curRight = arr[right];

            if (arr[left] > arr[left + 1]) {
                mid = left;
            }
            if (arr[right] > arr[right - 1]) {
                mid = right;
            }

            if (left > 0 && arr[left] == lastLeft) {
                if (lastLeftRepeat != arr[left]) {
                    lastLeftRepeat = arr[left];
                }
                arr[left] = -1;
            }

            if (right < arr.length - 1 && arr[right] == lastRight) {
                if (lastRightRepeat != arr[right]) {
                    lastRightRepeat = arr[right];
                }
                arr[right] = -1;
            }

            if (arr[left] == arr[right]) {
                if (lastLeftRepeat != arr[left] && lastRightRepeat == arr[right]) {
                    lastLeftRepeat = arr[left];
                    arr[left] = -1;
                } else if (lastLeftRepeat == arr[left] && lastRightRepeat != arr[right]) {
                    lastRightRepeat = arr[right];
                    arr[right] = -1;
                } else if (lastLeftRepeat != arr[left] && lastRightRepeat != arr[right]) {
                    lastLeftRepeat = arr[left];
                    lastRightRepeat = arr[right];
                    arr[right] = -1;
                }

                if (right != mid) {
                    right --;
                    lastRight = curRight;
                }
                if (left != mid) {
                    left ++;
                    lastLeft = curLeft;
                }
            } else if (arr[left] > arr[right]) {
                if (right != mid) {
                    right --;
                    lastRight = curRight;
                }
            } else {
                if (left != mid) {
                    left ++;
                    lastLeft = curLeft;
                }
            }
        }

        ArrayList<Integer> res = new ArrayList<>(arr.length);
        for (int i : arr) {
            if (i != -1)
                res.add(i);
        }
        System.out.println(Arrays.toString(res.toArray()));
    }
}


发表于 2021-12-08 13:07:34 回复(0)
<p>indexOF循环去重</p><p>ES6 Set去重</p><p><br></p>
发表于 2020-06-08 16:27:21 回复(0)