数组去重
- 双循环
let arr=[1,3,5,7,1,6,6,5,1];
for(let i=0;i<arr.length;i++){
for(let j=i+1;j<arr.length;j++){
if(arr[j]==arr[i]){
arr.splice(j,1);
j--;
}
}
}
console.log(arr)
- 利用对象相同属性
const arr=[1,3,5,7,1,6,6,5,1],obj={},arr2=[];
for(let i=0;i<arr.length;i++){
if(obj[arr[i]]==arr[i]){
arr.splice(i,1);
i--;
}else{
obj[arr[i]]=arr[i];
arr2.push(arr[i]);
}
}
console.log(arr2)
- 利用ES6的set
const arr=[1,3,5,7,1,6,6,5,1];
const arr2=Array.from(new Set(arr))
- 比对所有数据类型的值
const arr=[1,3,5,7,1,6,6,5,1],obj={},arr2=[];
for(let i=0;i<arr.length;i++){
if (!(obj[ary[i] + typeof ary[i]])) {
arr2.push(ary[i]);
obj[ary[i] + typeof ary[i]] = 1
}
}
console.log(arr2)
冒泡排序
const arr=[1,3,5,7,1,6,6,5,1]
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]){
var temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
console.log(arr)
快速排序
const arr=[1,3,5,7,1,6,6,5,1]
function quickSort(arr){
if(arr.length<=1){
return arr;
}
var left=[],right=[];
var midIndex=Math.floor(arr.length/2);
var midIndexVal=arr.splice(midIndex,1);
for(let i=0;i<arr.length;i++){
if(arr[i]<midIndexVal){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
return quickSort(left).concat(midIndexVal,quickSort(right));
}
console.log(quickSort(arr))
二维数组乱序
let arr=[obj1,obj2,obj3,obj4,obj5];
for(let i=0;i<arr.length;i++){
arr[i].index=Math.random()
};
arr.sort(function(a,b){
return a.index-b.index;
})
console.log(arr)
生成斐波那契数列
- 又称黄金分割数列,值得是一个数列:0、1、2、3、5、8、13、21、34....,在数学上,斐波拉契数列主要考察递归的调用。
function getFibonacci(n) {
var fibarr = [];
var i = 0;
while(i < n) {
if(i <= 1) {
fibarr.push(i);
} else {
fibarr.push(fibarr[i - 1] + fibarr[i - 2])
}
i++;
}
return fibarr;
}
console.log(getFibonacci(10))//[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
阶乘
- 递归实现
function factorialize(num) {
var i=0,result;
if(num<=1){
return 1;
}
return num * factorialize(num-1);
}
console.log(factorialize(5))1*2*3*4*5=120;
- 也可以用while循环实现
function factorialize(num) {
if(num<=0)return -1;
if(num==1)return 1;
var result=1;
while(num>1){
result *= num--;
}
return result;
}
后续会继续补充