JS

数组去重的实现

arr.indexOf(value)  如果元素在数组中已存在,则返回 0 ;元素不存在则返回 -1

​function unique(arr){
    var resArr = [];
    arr.forEach(v => {
        if(resArr.indexOf(v) == -1){
            resArr.push(v)
        }
    });
    return resArr;
}
var arr = [10,666,8,666,10,10,666];
console.log(unique(arr)); // 10, 666, 8
​

谈一谈JavaScript作用域链

当执行一段JavaScript代码(全局代码或函数)时,JavaScript引擎会创建为其创建一个作用域又称为执行上下文(Execution Context),在页面加载后会首先创建一个全局的作用域,然后每执行一个函数,会建立一个对应的作用域,从而形成了一条作用域链。每个作用域都有一条对应的作用域链,链头是全局作用域,链尾是当前函数作用域。

作用域链的作用是用于解析标识符,当函数被创建时(不是执行),会将this、arguments、命名参数和该函数中的所有局部变量添加到该当前作用域中,当JavaScript需要查找变量X的时候(这个过程称为变量解析),它首先会从作用域链中的链尾也就是当前作用域进行查找是否有X属性,如果没有找到就顺着作用域链继续查找,直到查找到链头,也就是全局作用域链,仍未找到该变量的话,就认为这段代码的作用域链上不存在x变量,并抛出一个引用错误(ReferenceError)的异常。

如何理解JavaScript原型链

JavaScript中的每个对象都有一个prototype属性,我们称之为原型,而原型的值也是一个对象,因此它也有自己的原型,这样就串联起来了一条原型链,原型链的链头是object,它的prototype比较特殊,值为null。

原型链的作用是用于对象继承,函数A的原型属性(prototype property)是一个对象,当这个函数被用作构造函数来创建实例时,该函数的原型属性将被作为原型赋值给所有对象实例,比如我们新建一个数组,数组的方法便从数组的原型上继承而来。

当访问对象的一个属性时, 首先查找对象本身, 找到则返回; 若未找到, 则继续查找其原型对象的属性(如果还找不到实际上还会沿着原型链向上查找, 直至到根). 只要没有被覆盖的话, 对象原型的属性就能在所有的实例中找到,若整个原型链未找到则返回undefined;

判断是否是回文

function checkPalindrom(str) {  
    return str == str.split('').reverse().join('');
}

统计一个字符串出现最多的字母

 function findMaxDuplicateChar(str){
    if(str.length == 1){ return str; }
    var arr = str.split('')
    var max = ''
    var obj = {}
    var maxCount = 1;
    arr.forEach(function(v){
        if(!obj[v]){ obj[v] = 1}
        else{
            obj[v] +=1;
        }
        if(obj[v] >= maxCount){
            maxCount = obj[v]
            max = v
        }
    })
    // 或者 str.charAt(i)
    // for(var i=0;i<str.length;i++){
    //     if(!obj[str.charAt(i)]) {
    //         obj[str.charAt(i)] = 1;
    //     }else{
    //         obj[str.charAt(i)] += 1;
    //     }
    //     if(obj[str.charAt(i)] >= maxCount){
    //         maxCount = obj[str.charAt(i)]
    //         max = str.charAt(i)
    //     }
    // }
    return max
 }

不借助临时变量,进行两个整数的交换

 function change(a,b){
    a = a + b;
    b = a - b ;
    a = a - b;
    console.log(a,b)
 }

 找出正数组的最大差值

 function getMaxProfit(arr){
    var max = arr[0];
    var min = arr[0];
    arr.forEach(v => {
        max = (v > max ? v : max)
        min = (v < min ? v : min)
    })
    return max - min;
 }
// 或  Math.min(a,b)  Math.max(a,b)

 随机生成指定长度的字符串

 function randomString(len){
    var str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    var res ='';
    for(var i=0;i<len;i++){
        res += str.charAt(Math.floor(Math.random() * str.length))
    }
    return res;
 }

 

参考:https://www.cnblogs.com/MythLeige/p/6047838.html

https://www.cnblogs.com/TinyMing/p/5806004.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值