js排序,去重实用算法

可以自己手动试试

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>js</title>
	</head>
	<body>
		<h1>数组排序</h1>
		<h2>array.sort(sortfunction)</h2>
		Array 对数组的引用。请注意,数组在原数组上进行排序,不生成副本。<br />
		sort() 方法用于对数组的元素进行排序。<br />
		按照字符编码的顺序进行排序<br />
		<h2>reverse() 方法用于颠倒数组中元素的顺序。</h2>
		<h2>冒泡排序</h2>
		<h2>选择排序</h2>
		<h2>快速排序</h2>
		<h1>二分法查找</h1>
		<h1>数组对象扁平化</h1>
		<h1>数组去重</h1>
		<h1>js缓存</h1>
		<h1>一元+运算符</h1>
	</body>
	<script>
		// 默认排序
		// var arr = ['General', 'Tom', 'Bob', 'John', 'Army'];
		// console.log(arr.sort());
		// // 数字字母降序
		// console.log(arr.reverse());
		// // 默认排序
		// var arr2 = [30, 10, 111, 35, 1899, 50, 45];
		// console.log(arr2.reverse());
		// var resArr2 = arr2.sort();
		// console.log(resArr2); //输出   [10, 111, 1899, 30, 35, 45, 50]k
		// // 数字升序
		// console.log(arr2.sort(function(a, b) {
		// 	return a - b
		// }))
		// // 降序
		// console.log(arr2.sort(function(a, b) {
		// 	return b - a
		// }))]
		// 反转排序
		// console.log(arr2.reverse());
		// //冒泡排序
		// let bar
		var shuz = [1, 9, 33.3, 2, 5, 34, 23, 98, 14]
		// for (let i = 0; i < shuz.length; i++) {
		// 	for (let j = 0; j < shuz.length - i; j++) {
		// 		if (shuz[j] > shuz[j + 1]) {
		// 			let bar = shuz[j]
		// 			shuz[j] = shuz[j + 1]
		// 			shuz[j + 1] = bar
		// 		}
		// 	}
		// }
		//新冒泡排序
		for (let i = 0; i < shuz.length; i++) {
			for (let j = 0; j < shuz.length - i; j++) {
				if (shuz[j] > shuz[j + 1]) {
					[shuz[j], shuz[j + 1]] = [shuz[j + 1], shuz[j]]
				}
			}
		}
		console.log(shuz)
		// // 选择排序
		// var arrp = [9.5, 8.8, 7, 6, 5, 4];
		// for (let i = 0; i < arrp.length - 1; i++) {
		// 	for (let j = i + 1; j < arrp.length; j++) {
		// 		if (arrp[i] > arrp[j]) {
		// 			let tmp = arrp[i]
		// 			arrp[i] = arrp[j]
		// 			arrp[j] = tmp
		// 		}
		// 	}
		// }
		// console.log(arrp)
		// // 快速排序
		// function quick_sort(arr, from, to) {
		// 	var i = from; //哨兵i
		// 	var j = to; //哨兵j
		// 	var key = arr[from]; //标准值
		// 	if (from >= to) { //如果数组只有一个元素
		// 		return;
		// 	}
		// 	while (i < j) {
		// 		while (arr[j] > key && i < j) { //从右边向左找第一个比key小的数,找到或者两个哨兵相碰,跳出循环
		// 			j--;
		// 		}
		// 		while (arr[i] <= key && i <
		// 			j
		// 		) { //从左边向右找第一个比key大的数,找到或者两个哨兵相碰,跳出循环,这里的=号保证在本轮循环结束前,key的位置不变,否则的话跳出循环,交换i和from的位置的时候,from位置的上元素有可能不是key
		// 			i++;
		// 		}
		// 		/**
		// 		  代码执行道这里,1、两个哨兵到找到了目标值。2、j哨兵找到了目标值。3、两个哨兵都没找到(key是当前数组最小值)
		// 		**/
		// 		if (i < j) { //交换两个元素的位置
		// 			var temp = arr[i];
		// 			arr[i] = arr[j];
		// 			arr[j] = temp;

		// 		}
		// 	}
		// 	arr[from] = arr[i] //
		// 	arr[i] = key;
		// 	quick_sort(arr, from, i - 1);
		// 	quick_sort(arr, i + 1, to);
		// 	return arr
		// }

		// var arrsd = [3, 3, -5, 6, 0, 2, -1, -1, 3];

		// var ddd = quick_sort(arrsd, 0, arrsd.length - 1);
		// console.log(ddd)
		// // // 快速排序2
		// var sd2 = [1, 9, 33.3, 2, 5, 6, 34, 23, 98, 14]

		// function quicksortd(arr) {
		// 	var len = arr.length,
		// 		index, pivot, left = [],
		// 		right = []
		// 	if (len <= 1) return arr
		// 	index = Math.floor(len / 2)
		// 	pivot = arr.splice(index, 1)
		// 	for (let i = 0; i < len - 1; i++) {
		// 		if (pivot > arr[i]) {
		// 			left.push(arr[i])
		// 		} else {
		// 			right.push(arr[i])
		// 		}
		// 	}
		// 	return quicksortd(left).concat(pivot, quicksortd(right))
		// }
		// console.log("shuc", quicksortd(sd2))
		// var Ts = ["tom", "jack", "yzb", "naccy"]
		var Ts = [1, 9, 2, 5, 6, 33.3, 34, 23, 98, 14]
		console.log(Ts.sort(function(a, b) {
			return a - b
		}))
		// console.log(Ts.reverse())
		// 二分法(二分法查找适用于数据量较大时,但是数据需要先排好顺序。只能从小到大,数字)
		function search(arr, key) {
			var low = 0,
				high = arr.length - 1; //定义一个最高点和最低点
			while (low <= high) { //当最高点大于最低点的时候
				var mid = Math.floor((high + low) / 2); //挑一个中间数
				if (arr[low] == key) {
					return low
				}
				if (arr[high] == key) {
					return high
				}
				if (arr[mid] === key) {
					return mid;
				} //如果中间数等于查找的值,返回这个中间数的位置
				if (arr[mid] < key) {
					low = mid + 1; //中间值小于查找的值的话,将查找的数列段的最低点变成中点+1
				}
				if (arr[mid] > key) {
					high = mid - 1; //大于的话最高点变成中点-1
				}
			}
			return "未发现"
		}
		// console.log(search(Ts, 'tom'))
		// for (let i = 0; i < Ts.length; i++) {
		// 	console.log(search(Ts, Ts[i]))
		// }
		// console.log(search(Ts, 5))
		// 递归二分法
		// function find(arr, low, high, key) { //开头就得给出这四个值
		// 	if (low > high) {
		// 		return -1; //找不到返回-1
		// 	}
		// 	var mid = Math.floor((low + high) / 2);
		// 	if (arr[mid] == key) {
		// 		return mid;
		// 	} else if (arr[mid] < key) {
		// 		low = mid + 1;
		// 		return find(arr, low, high, key); //递归调用
		// 	} else if (arr[mid] > key) {
		// 		high = mid - 1;
		// 		return find(arr, low, high, key); //递归调用
		// 	}
		// }
		// for (let i = 0; i < Ts.length; i++) {
		// 	console.log(find(Ts, 0, Ts.length, Ts[i]))
		// }
		// 数组对象扁平化
		// var newobj = {};
		// function flat(cur, key2) {
		// 	Object.keys(cur).forEach(function(key) {
		// 		if (typeof cur[key] != "object") {
		// 			if (key2) {
		// 				newobj[key2 + key] = cur[key]
		// 			} else {
		// 				newobj[key] = cur[key]
		// 			}
		// 		} else if (typeof cur[key] == "object") {
		// 			if (key2) {
		// 				flat(cur[key], key2 + key + ".")
		// 			} else {
		// 				flat(cur[key], key + ".")
		// 			}
		// 		}
		// 	});
		// 	return newobj
		// }
		// var target = flat(source);
		// console.log(target);

		// es6方法set去重
		var cc = [3, 3, -5, 6, 0, 2, -1, -1, 3];
		console.log(cc)
		var sst = Array.from(new Set(cc))
		console.log(sst[0])
		console.log(sst)
		// splice去重
		function unique(arr) {
			for (let i = 0; i < arr.length; i++) {
				for (let j = i + 1; j < arr.length; j++) {
					if (arr[i] == arr[j]) {
						arr.splice(j, 1)
						j--
					}
				}
			}
			return arr;
		}
		console.log(unique(cc))
		// 利用includes

		function cxuncludes(arr) {
			let ard = []
			for (let i = 0; i < arr.length; i++) {
				if (!ard.includes(arr[i])) {
					ard.push(arr[i])
				}
			}

			return ard
		}
		console.log(cxuncludes(cc))
		// 利用filter
		function chafilter(arr) {
			return arr.filter(function(item, index, arr) {
				return arr.indexOf(item, 0) === index;
			});
		}
		console.log(chafilter(cc))

		//js缓存这个概念很虚。
		//一元 +运算符,使字符串转换数字
		var d1 = "42"
		var d2 = +'42'
		console.log(d1, typeof d1, d2, typeof d2)
		console.log(true, false, null, +true, +false, +null)
	</script>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值