前端JavaScript小知识 更新中 2021.11.4

132 阅读1分钟

1. 输入一个值,返回其数据类型

function type(para) {
    return Object.prototype.toString.call(para)
}

2、数组去重

var arr=[1,2,3,4,2,5,3]
function unique1(arr) {
    return [...new Set(arr)]
}
console.log(unique1(arr))
function unique2(arr) {
    var obj = {};
    return arr.filter(ele => {
        if (!obj[ele]) {
            obj[ele] = true;
            return true;
        }
    })
}
function unique3(arr) {
    var result = [];
    arr.forEach(ele => {
        if (result.indexOf(ele) == -1) {
            result.push(ele)
        }
    })
    return result;
}

3、字符串去重

      var arr1 = "1233fddfd&3434fdsaff&454545&4545444rfdsfds&545gdsgs";
      var arr2 = "";
      for(var i=0;i<arr1.length;i++){
        if(arr2.indexOf(arr1[i])==-1){
          arr2 +=arr1[i]
        }
      }
      console.log(arr2)

字符串去重,字母在前,数字在后顺序排列

var str = "1233fddfd&3434fdsaff&454545&4545444rfdsfds&545gdsgs";
var n = "";
var s="";
for(var i = 0;i < str.length; i++){
 if((str[i]>=0&&str[i]<=9)&&n.indexOf(str[i])==-1){
     n+=str[i];
 }else if((str.charCodeAt(i)>=97&&str.charCodeAt(i)<=122)&&s.indexOf(str[i])==-1){
     s+=str[i];
 }
}
console.log(n+s); //12345fdsarg

4、深拷贝 浅拷贝

1.浅拷贝常用方法

slice

   var arr1=[1,2,3]
   arr2=arr1.slice()
   console.log(arr1);//[1,2,3]
   console.log(arr2);//[1,2,3]

concat

 var arr1=[1,2]
 arr2=arr1.concat();
 console.log(arr1);//[1,2] 
 console.log(arr2);//[1,2]
2.深拷贝

 1. JSON.parse(JSON.stringify())

let arr=[1,3,{username:'xiaoming'}]
let arr2=JSON.parse(JSON.stringify(arr))
arr2[2].username='liwen'
console.log(arr,arr2)

 原理: 用JSON.stringify将对象转成JSON字符串,再用JSON.parse()把字符串解析成对象,一去一来,新的对象产生了,而且对象会开辟新的栈,实现深拷贝。
**这种方法虽然可以实现数组或对象深拷贝,但不能处理函数。**

let arr=[1,3,{username:'make'},function(){}]
let arr2 = JSON.parse(JSON.stringify(arr));
arr2[2].username = 'duncan';
console.log(arr, arr2);

2. 手写递归方法