可以自己手动试试
<!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>