实用JS片段

1. 深拷贝

function deepClone(source){    
    if(!source && typeof source !== 'object'){      
        throw new Error('error arguments', 'shallowClone');    
    }    
    var targetObj = source.constructor === Array ? [] : {};    
    for(var keys in source){       
        if(source.hasOwnProperty(keys)){          
            if(source[keys] && typeof source[keys] === 'object'){           
                targetObj[keys] = source[keys].constructor === Array ? [] : {}; 
                targetObj[keys] = deepClone(source[keys]);    //递归      
            }else{            
                targetObj[keys] = source[keys];         
            }       
        }    
    }    
    return targetObj; 
}

JOSN 对象中的 stringify 可以把一个 js 对象序列化为一个 JSON 字符串,parse 可以把 JSON 字符串反序列化为一个 js 对象,这两个方法实现的是深拷贝。

2. 数组去重

//对简单的字符串、数字型的数组实用
function unique(arr) {
    return arr.filter(function(item, index){ //item 表示数组中的每个元素,index 是每个元素的出现位置。
       return arr.indexOf(item) === index; // indexOf 返回第一个索引值
   });
}

function unique(arr) {
    var newArr = [];
    arr.forEach(function(item){ //一次循环,item 即为数组中的每一项
        if(newArr.indexOf(item) === -1){
            newArr.push(item);
        }
    });
    return newArr;
}
//对复杂的对象数组、多维数组、null、undefined、NaN需要用到ES6的Map()、Set()
//2.Map ()
function unique(arr) {
    var newArr = [];
    var len = arr.length;
    var tmp = new Map();
    for(var i=0; i<len; i++){
        if(!tmp.get(arr[i])){
            tmp.set(arr[i], 1);
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
//2.Set ()
function unique(arr){
    var set = new Set(arr);
    return Array.from(set);
}
//3.Array.prototype.includes()
function unique(arr) {
    var newArr = [];
    arr.forEach(function(item){
        if(!newArr.includes(item)){
            newArr.push(item);
        }
    });
    return newArr;
}

3. 交集、并集

let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);

let union = new Set([...a, ...b]);  // [1, 2, 3, 4]

let intersect = new Set([...a].filter(x => b.has(x)));  // [2, 3]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容