常用的方法

  1. 多维数组转一维数组
   var arr = [1,2, [1,2,3],4,5,[5,6,[1,2]],7,8]
   // 转字符串后转回数组,此时数组值为字符串,然后用map转number
   let arr1 = arr.join(',').split(',')
   let res = arr1.map(item =>  Number (item))
   
  // 方法二递归
    var arr = [1,2, [10,20,30],4,5,[15,16,[21,31]],7,8]
    var res = []
    function fun (data){
        for(let item of data) {
            if(item instanceof Array){
                fun(item)
            } else {
                 res.push(item)
            }
        }
        return res
    }
    console.log(fun(arr))
   

2.排序

// 1.冒泡排序
  let arr = [1,3,6,2,10]
  
  function fun (arr){
     for (var i=0;i<arr.length-1;i++){
        //控制每比较的次数
        for (var j=0;j<arr.length-1-i;j++){
            if (arr[j]<arr[j+1]){
                // 或es6的数组解构语法
                [arr[j], arr[j+1]] = [arr[j+1], arr[j]]
            }
        }
    }
    return arr
  }

 //   2.快速排序
    // //快排
  var arr = [2,5,1,4,9,10]
    
  function fun (arr) {
    var arr1 = []
    var cindex = Math.floor(arr.length / 2)
    var c = arr.splice(cindex, 1);
    for (var i = 0; arr.length > i; i++){
        if (arr[i] > c){
            arr1.push(arr[i])
        } else {
            arr1.unshift(arr[i])
        }
    }
    arr1.splice(cindex-1, 0, ...c)
    return arr1
  }

3.字符串中重复最多的字符

    var str = 'aaabbbbccd' 或 var str = [1,1,1,1,2,2,3,4]
    
    var obj = {} //转成对象格式
    for(let i = 0; str.length > i; i++){
     if(!obj[str[i]]){ //对象key值不存在时,新加入value默认1
        obj[str[i]] = 1
     }else {
        obj[str[i]]++ // 存在自加
     }
    }
   console.log(obj) // {a:3;b:4;c:2;d:1}

    var max = 0 // 最多次数即对象value最大值
    var n = '' // 最大值的key
    for(var j in obj) {
        if(obj[j] > max){
           max = obj[j]
           n = j
        }
    }

4.json对象去重函数

function uniqueArray(arr,key){
    // new_arr数组是存放key值的对象,用于排除重复的对象
    var new_arr=[];
    // result用于存放new_arr排除后没有重复对象的值
    var result=[];
    for(var i=0; i<arr.length; i++){
        //  new_arr中不包含key值才能进入
        if(!new_arr.includes(arr[i][key])){     
            //如果没有找到就把这个key放到arr里面,以便下次循环时用
            new_arr.push(arr[i][key]);           
            //result中不存在的项push进去
            result.push(arr[i]);                 
        }
    }
    return result;
}

5.浅拷贝与深拷贝

1)深复制在计算机中开辟了一块内存地址用于存放复制的对象,
2)而浅复制仅仅是指向被复制的内存地址,如果原地址中对象被改变了,那么浅复制出来的对象也会相应改变。

//1.浅拷贝
    ES6:Object.assign() 
    数组: 
        let arr = [1, 2, 3]
        let copy_arr = []
        
        1.copy_arr = Array.from(arr)
        2.copy_arr = [...arr]
        3.for(var i=0; i<arr.length; i++){
          copy_arr[i]=arr[i];
        }
    对象:
        let obj = {name: 'zhangsan',sex: '男'}
        let copy_obj = {}
        for(var i in obj){
            copy_obj[i] = obj[i]
        }
        
//2.深拷贝--递归复制

function deepCopy(obj){
    let result = Array.isArray(obj)?[]:{};  
    if(obj && typeof obj === 'object'){ 
        for(let key in obj){
            if(obj.hasOwnProperty(key)){
                // 如果key还是对象或数组继续调用该方法
                if(obj[key]&&typeof obj[key]==='object'){
                    result[key]=deepCopy(obj[key]);
                }else{
                    result[key]=obj[key];
                }
            }
        }
    }
    return result;
}

6.倒计时

// 倒计时10秒
//1.延时器实现
var time = 10
var timer = setInterval(() => {
if(time>1){
    time -- 
} else {
    time = 0
    clearInterval(timer)
}
console.log(time)
},1000)

//2.定时器实现
    var time = 10
    function fun(){
        var timer = setTimeout(fun,1000) 
        if(time>1){
            time -- 
        } else {
            time = 0
            clearTimeout(timer)
        }
        
        console.log(time)
    }
    fun()

Json 对象,判断两个value值相等

function uniqueArray(arr,key,val){
    // new_arr数组是存放key值的对象,用于排除重复的对象
    var new_arr=[];
    // result用于存放new_arr排除后没有重复对象的值
    var result=[];
    for(var i=0; i<arr.length; i++){
        arr[i][key] = arr[i][key] - 0
        arr[i][val] = arr[i][val] - 0
        //  new_arr中不包含key,val值才能进入
        if(new_arr.includes(arr[i][key]) && new_arr.includes(arr[i][val])){
            arr[i][val] += (Math.random() * 0.0001)
            result.push(arr[i]);
        } else {
            new_arr.push(arr[i][key]);
            new_arr.push(arr[i][val]);
            result.push(arr[i]);
        }
    }
    return result;
}

6.多层嵌套json对象添加属性

// 方法一 递归函数
// data: json对象数据
// beforeActive:添加的属性
dataFormat(data) {
  if (!data.hasOwnProperty('beforeActive')) {
    // data['tag'] = 'beforeActive';
    data.beforeActive = true
  }
  // 要返回其枚举自身属性的对象
  const propArr = Object.keys(data);
  propArr.forEach(item => {
    if (typeof data[item] === 'object') {
      this.dataFormat(data[item]);
    }
  });
  return data;
};
// 方法二
// obj为json对象,addkey:添加的属性。addvalue: 添加的属性值
mapObj(obj, addkey, addvalue){
  for(let key in obj){
    if (key === 'children'
        && obj.hasOwnProperty("children")
        && obj[key] instanceof Object
        && !obj instanceOf Array) {
      obj[key][addkey] = addvalue
      mapObj(obj[key],addkey,addvalue)
    }
  }
}

// 解析url
    function analysisUrl(url){

        let hash = url.slice(url.indexOf('?')+1).split('&')

        let params = {}

        for(let i in hash){

            hash[i] = hash[i].split("=")

            params[hash[i][0]]=hash[i][1]

        }
        return params

    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容