Javascript实现数组去重,快速排序

xiaoxiao2021-02-28  60

1.数组去重

只讨论两种,当然方法很多。

A: 最简单实现

思路:定义一个新的空数组 n,利用 indexOf 判断, 遍历数组 arr ,如果 arr[i] 已经存在于 n 数组内,不添加;否则就将 arr[i] 添加到数组 n 中, 最后返回数组 n function unique(arr) { var n = []; for (var i = 0; i < arr.length; i ++) { if (n.indexOf(arr[i]) == -1){ n.push(arr[i]) } } return n; } 试着运行下: console.log(unique([NaN,2,NaN, 3, 2, 4, 4, 5,6]));得到的结果为: [NaN, 2, NaN, 3, 4, 5, 6]      对于NaN就会出现错误

B:利用Object对象不存在相同属性名特性进行去重

思路:新建一个空数组 n 存放结果。并新建一个空对象 json ,循环遍历数组,把数组的每个元素作为空对象 json的属性名(键),属性值(值)可以随便定。循环遍历的时候,检查 json[arr[i]] 属性是否已经存在,若存在, 表示此项 arr[i]为重复元素;如果不存在,就将 arr[i]这个值存入数组 n 中。最后返回 数组 n  function unique1(arr) { var n = []; var json = {}; for (var i = 0; i < arr.length; i ++) { if (!json[arr[i]]) { n.push(arr[i]); json[arr[i]] = 2; } } return n; } 试着运行下: console.log(unique1([NaN,2,NaN, 3, 2, 4, 4, 5,6])); 得到结果为: [NaN, 2, 3, 4, 5, 6]

2.快速排序

使用递归对数组进行快速排序: 思路:1.选一个基准项,midNum,    2.定义两个空数组来临时存放结果: left = [ ], right =  [ ];    3.遍历数组中的元素,每个元素与 基准项 midNum 对比,小于基准值的 元素放入数组 left 中,大于基准项的放入数组 right 中;    4.然后使用递归不断的重复上面过程,直到最后得出结果。 function quickSort(arr) { if (arr.length < 2) { return arr } var midIndex = Math.floor(arr.length / 2); var midNum = arr.splice(midIndex, 1); var left = []; var right = []; for (var i = 0; i < arr.length; i++) { if (arr[i] < midNum) { left.push(arr[i]) } else { right.push(arr[i]) } } return quickSort(left).concat([midNum], quickSort(right)) } 尝试运行: var arr = [2, 4, 3, 4, 6, 3, 2, 5, 6, 2, 3, 6, 5, 4] alert(quickSort(arr)) 得到结果为:  
转载请注明原文地址: https://www.6miu.com/read-58397.html

最新回复(0)