数组的去重和排序
栏目: JavaScript · 发布时间: 6年前
内容简介:通过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归并排序和利用归并排序计算出数组中的逆序对
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Twenty Lectures on Algorithmic Game Theory
Tim Roughgarden / Cambridge University Press / 2016-8-31 / USD 34.99
Computer science and economics have engaged in a lively interaction over the past fifteen years, resulting in the new field of algorithmic game theory. Many problems that are central to modern compute......一起来看看 《Twenty Lectures on Algorithmic Game Theory》 这本书的介绍吧!