智联招聘web前端开发 |
西安前端开发招聘 |
兰州前端开发招聘 |
<一>、快速排序 方法介绍:
javascript 代码
/*
*(1)在数据集之中,选择一个元素作为”基准”(pivot)。
*(2)所有小于”基准”的元素,都放置于”基准”的”小值区域”(左边);所有大于”基准”的元素,都被置于”基准”的”大值区域”(右边)。
*(3)对以”基准”为分割线的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
*/
quickSort = function(arr) {
//返回(如果当前数组不再需要排序时)
if (arr.length <= 1) return arr
//声明两个数组分别用来防止”小值”和”大值”
var less = []
var greater = []
//选取被排序数组中的任一元素作为”基准”(这里我们就选取数组中间的元素)
var pivotIndex = Math.floor(arr.length / 2)
var pivot = arr.splice(pivotIndex, 1)[0]
//遍历数组,进行区分操作
for (var i = 0, len = arr.length; i < len; i++) {
if (arr[i] < pivot) {
less.push(arr[i])
} else {
greater.push(arr[i])
}
}
//最后使用递归不断重复这个过程,直到获得排序后的数组
return quickSort(less).concat([pivot], quickSort(greater))
}
//实例
var arr = [89, 28, 743, 18, 93, 58, 84, 65]
console.log(‘数组元素的原始排列:’ + arr.join(‘,’))
console.log(‘排序后,数组元素的排列:’ + quickSort(arr).join(‘,’))
<二>、数组去重 方法介绍:
1.利用indexOf
javascript 代码
function unique(arr) {
var ret = []
for (var i = 0, len = arr.length; i < len; i++) {
var item = arr[i]
if (ret.indexOf(item) === -1) {
ret.push(item)
}
}
return ret
}
var arr = [1, 3, 5, ‘1’, 5, 9]
var r = unique(arr)
console.log(‘排序后:’ + r)
但问题是在老版本的IE浏览器中,不存在数组的indexOf方法~
2.两层循环筛选法
javascript 代码
Array.prototype.unique = function() {
var ret = [this[0]]
for (var i = 1; i < this.length; i++) {
var repeat = false
for (var j = 0; j < ret.length; j++) {
if (this[i] == ret[j]) {
repeat = true
break
}
}
if (!repeat) {
ret.push(this[i])
}
}
return ret
}
3.利用hash对象来代替indexOf
javascript 代码
function unique(arr) {
var ret = []
var hash = {}
for (var i = 0; i < arr.length; i++) {
var item = arr[i]
var key = typeof item + item
if (hash[key] !== 1) {
ret.push(item)
hash[key] = 1
}
}
return ret
}
var arr = [1, 3, ‘h’, 1, ‘h’]
var r = unique(arr)
console.log(r)
注:(在JavaScript里,对象的键值只能是字符串,因此这里用到了var key = typeof(item) + item;来区分 数字1 和字符串“1”等之类的情况)。
当然这些都不是万能的代码,具体看执行环境
广州前端开发招聘 |
大连前端开发招聘 |
思睿地产招聘前端开发 |
评论前必须登录!
注册