一、数组排序方法 冒泡排序
function bubble(arr) {
//外层循环i控制比较轮数
let temp = null
for (let i = 0; i < arr.length - 1; i++) {
//里层循环控制每一轮比较次数
for (let j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
//当前项大于后一项
temp = arr[j]//交换位置
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
return(arr)
}
bubble(arr)
插入排序
//插入排序
function insert(arr){
//准备一个新数组,用来储存插入的第一个值
let handle = []
handle.push(arr[0])
for (let i = 1; i < arr.length; i++) {
let a = arr[i]
//和handle数组里的值依次比较,从后往前比较
for(let j =handle.length-1;j>=0;j--){
//每一次比较数组的值
let b = handle[j]
//当前的a值比b值大,放到后面
if(a>b){
handle.splice(j+1,0,a)
break;
}
if(j===0){
handle.unshift(a)
}
}
}
return handle
}
insert(arr)
快速排序
//快速排序
function quick(arr){
if(arr.length<=0){
return arr
}
//找到数组中间项,在原数组把他移除
let middle = Math.floor(arr.length/2);
let midvalue = arr.splice(middle,1)[0]
//准备左右两个数组,循环剩下数组每一项,比当前小放左边,比当前大放右边
let arrleft=[]
let arrright = []
for (let i = 0; i < arr.length; i++) {
let item = arr[i]
item<midvalue?arrleft.push(item):arrright.push(item);
}
//递归方式让左右两边数组持续这样处理,一直两边都排好序为止
return quick(arrleft).concat(midvalue,quick(arrright))
}
quick(arr)
二、数组求和
//递归
function sum(arr) {
var len = arr.length;
if(len == 0){
return 0;
} else if (len == 1){
return arr[0];
} else {
return arr[0] + sum(arr.slice(1));
}
}
//for 循环
function sum(arr) {
var s = 0;
for (var i=arr.length-1; i>=0; i--) {
s += arr[i];
}
return s;
}
//forEach遍历
function sum(arr) {
var s = 0;
arr.forEach(function(val, idx, arr) {
s += val;
}, 0);
return s;
};
//eval
function sum(arr) {
return eval(arr.join("+"));
};
三、数组去重
function dedup(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(dedup(arr))
四、数组合并
//concat 合并
var a = [1,2,3];
var b = [4,5,6];
var c = a.concat(b)//c=[1,2,3,4,5,6];
//for循环
for( var i in b)
{
a.push(b[i]);
}
console.log(a)
//多维数组转一维数组
/**
* 使用转字符串法
*/
let arr = [1,[2,3],[4,5,[6,7]]];
let result = arr.join(',').split(',');
console.log(result); // ["1", "2", "3", "4", "5", "6", "7"]
// 可以使用循环改进
function unid(arr){
let result = arr.join(',').split(',');
let result2 = result.map(item=>{
return Number(item);
});
return result2;
}
console.log(unid(arr)); // [1, 2, 3, 4, 5, 6, 7]
// 数组的concat方法
let tempArr2 = ['3',4],
tempArr3 = ['3',4,[5,6]];
console.log([1,2].concat(tempArr2)); // [1, 2, "3", 4]
concat 只能二维数组转一维数组
// 方法三:使用递归来实现多维数组转为一维数组
let result = [],
arr = ['1',2,[3,4,[5,6]],7];
function unid(arr){
for(let item of arr){
if(Object.prototype.toString.call(item).slice(8, -1)==='Array'){
unid(item);
}else{
result.push(item);
}
}
return result;
}
console.log(unid(arr)); // ["1", 2, 3, 4, 5, 6, 7]