数组的去重和排序
栏目: JavaScript · 发布时间: 5年前
内容简介:通过new Set() 生成一个类数组,并没有重复的值或者可以使用Array.from(), 可以把类数组转换成数组结合使用Array.indexOf() 返回数组中某个指定元素第一次出现的位置,没有找到指定元素则返回-1
通过new Set() 生成一个类数组,并没有重复的值
let [...result] = new Set(arr) // [ 1, 4, 12, 5, 125, 4512 ] 复制代码
或者可以使用Array.from(), 可以把类数组转换成数组结合使用
let result = Array.from(new Set(arr)) // [ 1, 4, 12, 5, 125, 4512 ] 复制代码
Array.indexOf()
Array.indexOf() 返回数组中某个指定元素第一次出现的位置,没有找到指定元素则返回-1
var result = arr.filter((item,index) => { return arr.indexOf(item) === index }) 复制代码
-
filter函数会返回当前循环的这一项的判断结果,为true则保留这一项, 反之舍弃这一项,在这里第一次出现的4在索引1的位置,并记录下来 ; 最后两个4的索引 不等于第一次记录4的索引位置,所以返回 false 并不会被保留
-
另一种思路或者利用indexOf没找到指定元素返回-1这一特性,把这心不重复的元素push到新数组中
let newArr = [] let result = arr.forEach(item => { if(newArr.indexOf(item) === -1) { newArr.push(item) } }) console.log(newArr) // [ 1, 4, 12, 5, 125, 4512 ] 复制代码
- 类似indexOf 方法使用js实现去重,定义一个空数组,循环要去重的数组,如果新数组中有当前这一项break,如果没有就push进去
let newArr = [] const isRepeat; for(let i=0; i<arr.length;i++) { isRepeat = false for( let j=0; j< newArr.length;j++) { if(arr[i] === newArr[j]) { isRepeat = true break } } if(!isRepeat) { newArr.push(arr[i]) } } console.log(newArr) [ 1, 4, 12, 5, 125, 4512 ] 复制代码
Map构造函数
let tmp = new Map() let result = arr.filter(item => { return !tmp.has(item) && tmp.set(item, 1) }) console.log(result) // [ 1, 4, 12, 5, 125, 4512 ] 复制代码
冒泡排序
var a = [45,67,23,88,21,6,99]; for(let i=0; i < a.length-1; i++) { for(let j=0; j< a.length-1-i; j++) { if(a[j] > a[j+1]) { var temp = a[j] a[j] = a[j + 1] a[j+1] = temp } } } console.log(a) // [ 6, 21, 23, 45, 67, 88, 99 ] 复制代码
相邻两个比较,i项大于i+1项互换位置,循环a.length -1 轮把其中最大一项放到对尾
选择排序
var a = [45,67,23,88,21,6,99]; let min; // 最小值 let pos; // 最小值下标 for(let i=0;i<a.length;i++) { min = a[i] pos = i for(let j=i+1;j<a.length;j++) { if(a[j] < min) { min = a[j] pos = j } } var temp = a[i] a[i] = min a[pos] = temp } console.log(a) // [ 6, 21, 23, 45, 67, 88, 99 ] 复制代码
假定最小值min 和 最小值的 索引默认为第一项,
第二个循环遍历数组中除 i
项外, 发现有比 min
的元素小,立即重新对 min
赋值,第二层循环结束。
在第一层循环中,把当前这一项备份 ,为了调换位置使用 var temp = a[i]
当前这一项和 min
调换位置 a[i] = min
a[pos] = temp
插入排序
var a=[45,67,23,88,21,6,99]; for(let i=0;i<a.length;i++) { for(let j=i;j>0 && a[j] < a[j-1];j--) { var temp = a[j] a[j] = a[j-1] a[j-1] = temp } } console.log(a) // [ 6, 21, 23, 45, 67, 88, 99 ] 复制代码
当前这一项元素和它的前一项进行比较
如果当前的值小于他的前一项那么调换位置, j--
会使当前位置向前走一位,直到找到比他小的交换位置后,如果 j < 0
后跳出循环。最小值会移到数组第一项。
排序算法——插入排序 blog.csdn.net/xiaoping091…
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- JavaScript数组-排序算法
- javascript 数组排序(sort,冒泡)
- Go 寻找数组中最小的 k 个数:全部排序和部分排序
- JS骚操作之数组快速排序
- 数组排序并插入值算法(JavaScript)
- MergeSort归并排序和利用归并排序计算出数组中的逆序对
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。