js数组的去重,排序,各有几种方式,分别是怎么实现的?
数组去重
数组去重方法一:
- arr.splice
var arr = [1, 3, 5, 6, 3, 5, 6, 3, 7, 9, 23, 23]; function a(arr) { for (var i = 0; i < arr.length - 1; i++) { for (var j = i + 1; j < arr.length; j++) { if (arr[i] == arr[j]) { arr.splice(j, 1); j--; } } } return arr; } var arr1 = a(arr); console.log(arr1); // [1, 3, 5, 6, 7, 9, 23]
数组去重方法二:
- 借助新数组,判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中(原数组长度不变但被按字符串顺序排序)
var arr = [1, 3, 5, 6, 3, 5, 6, 3, 7, 9, 23, 23]; function sun(arr) { var b = []; var c; arr.sort(); c = arr[0]; b.push(arr[0]); for (var i = 0; i < arr.length; i++) { if (arr[i] != c) { b.push(arr[i]); c = arr[i]; } } return b; } var arr1 = sun(arr); console.log(arr1); //[1, 23, 3, 5, 6, 7, 9]
数组去重方法三:
- 创建一个新数组,判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中
var arr = [1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5]; function norepeat(arr) { var temp = []; for (var i = 0; i < arr.length; i++) { if (temp.indexOf(arr[i]) == -1) { temp.push(arr[i]); } } return temp; } var arr2 = norepeat(arr); console.log(arr2); //[1, 23, 3, 5, 6, 7, 9, 8]
数组去重方法四:
- 借助 indexOf() 方法判断此元素在数组中首次出现的位置下标与循环下标是否相等
var arr = [1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5, 5, 5]; function norepeat(arr) { for (var i = 0; i < arr.length; i++) { if (arr.indexOf(arr[i]) != i) { arr.splice(i, 1); //删除数组元素后数组长度减1后面的元素前移 i--; //数组下标回退 } } return arr; } var arr2 = norepeat(arr); console.log(arr2); //[1, 23, 3, 5, 6, 7, 9, 8]
数组去重方法五:
- 利用数组中的 filter 方法
var arr = ["apple", "banana", "pear", "apple", "orange", "orange"]; // filter 内的三个参数分别代表:值,下标,整个数组 var arr2 = arr.filter(function (value, index, self) { return self.indexOf(value) == index; }); console.log(arr2); //["apple", "banana", "pear", "orange"]
数组排序
数组排序方法一:
- sort 方法(a-b正向 b-a 反向)
var arr = [3, 1, 5, 8, 28]; //正向 a-b var arr1 = arr.sort(function (a, b) { return a - b; }); console.log(arr1); //[1,3,5,8,28]; //反向 b-a var arr2 = arr.sort(function (a, b) { return b - a; }); console.log(arr2); //[28,8,5,3,1]
数组排序方法二:
- 冒泡排序
var arr = [3, 1, 5, 8, 28]; function sortArr(arr) { for (var i = 0; i < arr.length; i++) { //arr.length-i 保证每次比较都会少比较一位(因为最大的一位已经找出,放在了最后) for (var j = 0; j < arr.length - i; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; } var arr1 = sortArr(arr); console.log(arr1); //[1, 3, 5, 8, 28]
数组排序方法三:
- 选择排序
var arr = [1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5]; function selectSort(arr) { for (var i = 0; i < arr.length; i++) { //设置当前范围最小值和索引 var min = arr[i]; var minIndex = i; //在该范围选出最小值 for (var j = i + 1; j < arr.length; j++) { if (min > arr[j]) { min = arr[j]; minIndex = j; } } //将最小值插入 arr.splice(i, 0, min); //将原来位置的最小值删除 arr.splice(minIndex + 1, 1); } return arr; } var arr1 = selectSort(arr); console.log(arr1); //[1, 1, 1, 1, 3, 5, 5, 6, 7, 8, 9, 9, 23, 23]
以上就是原生 js 中数组的去重与排序的方法,不懂得也可以在评论区里问我,以后会持续添加一些新的功能,敬请关注。