一、数组扁平化处理
现在的解决方案
//Array.flat(n)是ES10扁平数组的api,n表示维度,n值为Infinity时维度为无限大
const arr = [1, 2, 3, 5, 6, 2];
console.log(arr.flat());//[1, 2, 3, 5, 6, 2]
const arr2=[1,2,5,[2,4]];
console.log(arr2.flat());// [1, 2, 5, 2, 4]
const arr3=[1,2,[1,2,[3,4]]];
console.log(arr3.flat(3));//[1, 2, 1, 2, 3, 4]
const arr4=[1,2,[3,4,[5,6,[7,8]]]];
console.log(arr4.flat(4));//[1, 2, 3, 4, 5, 6, 7, 8]
以前的解决方案
function flatten(arr) {
while(arr.some(item=>Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
console.log(flatten([1, [2, 3]]));//[1,2,3]
console.log(flatten([1, [2, 3, [4, 5]]])); //[1,2,3,4,5]
二、数组去重
现在的解决方案
//set是ES6新出来的一种一种定义不重复数组的数据类型
//Array.from是将类数组转化为数组
//...是扩展运算符,将set里面的值转化为字符串
const result=Array.from(new Set([1,2,3,3,4,4])); //[1,2,3,4]
console.log(result);
const result2=[...new Set([1,2,3,3,4,4])]; //[1,2,3,4]
console.log(result2);
以前的解决方案
Array.prototype.distinct = function(){
var arr = this,
result = [],
i,
j,
len = arr.length;
for(i = 0; i < len; i++){
for(j = i + 1; j < len; j++){
if(arr[i] === arr[j]){
j = ++i;
}
}
result.push(arr[i]);
}
return result;
}
[1,2,3,3,4,4].distinct(); //[1,2,3,4]
三、数组排序
//sort是js内置的排序方法,参数为一个函数
const arr=[1,2,3,4];
arr.sort((a, b) => a - b); // [1, 2,3,4],默认是升序
console.log(arr);
const arr2=[1,2,3,4];
arr2.sort((a, b) => b - a); // [4,3,2,1] 降序
console.log(arr2);
//冒泡排序
Array.prototype.bubleSort=function () {
let arr=this,
len = arr.length;
for (let outer = len; outer >= 2; outer--) {
for (let inner = 0; inner <= outer - 1; inner++) {
if (arr[inner] > arr[inner + 1]) {
//升序
[arr[inner], arr[inner + 1]] = [arr[inner + 1], arr[inner]];
console.log([arr[inner], arr[inner + 1]]);
}
}
}
return arr;
}
[1,2,3,4].bubleSort() //[1,2,3,4]
//选择排序
Array.prototype.selectSort=function () {
let arr=this,
len = arr.length;
for (let i = 0, len = arr.length; i < len; i++) {
for (let j = i, len = arr.length; j < len; j++) {
if (arr[i] > arr[j]) {
[arr[i], arr[j]] = [arr[j], arr[i]];
}
}
}
return arr;
}
[1,2,3,4].selectSort() //[1,2,3,4]
四、数组取最大值
现在的解决方案1
const arr=[1,4,2,5];
function getMax5(arr){
return Math.max(...arr)
}
console.log(getMax5(arr));
现在的解决方案2
const arr=[1,4,2,5];
function getMax4(arr) {
return arr.reduce( (prev, cur)=> {
return Math.max(prev,cur);
},0)
}
console.log(getMax4(arr));
现在的解决方案3
const arr=[1,4,2,5];
function getMax3(arr){
return Math.max.apply(this,arr);
}
console.log(getMax3(arr));
以前的解决方案1
const arr=[1,4,2,5];
function getMax(arr){
const len=arr.length;
arr.sort((a,b)=>a-b);
return arr[len-1];
}
const result=getMax(arr);
console.log(result);
以前的解决方案2
function getMax2(arr) {
let max=arr[0];
for(let i=0,len=arr.length;i<len;i++){
if(max<arr[i]){
max=arr[i];
}
}
return max
}
console.log(getMax2(arr));