JS小代码

1.字符串反转

var string = 'abcd';
console.log(string.split('').reverse().join(''))

2.计时器

var countdown = 60;
var settime = function () {
    if (countdown == 0) {
        console.log("获取验证码");
        countdown = null;
        return;
    } else {
        console.log(countdown + "秒后重发");
        countdown--;
    }
    setTimeout(function () {
        settime()
    }, 1000)
}
settime();

3.数组的reduce函数使用

  •     数组求和
function sum(arr) {
    return arr.reduce(function (x, y) {
        return x + y;
    });
}

sum([1, 2, 3, 4, 5]); // 15
  • 统计数组中元素出现次数
    var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
    
    var countedNames = names.reduce(function (allNames, name) { 
      if (name in allNames) {
        allNames[name]++;
      }
      else {
        allNames[name] = 1;
      }
      return allNames;
    }, {});
    // countedNames is:
    // { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
  • 数组去重
    let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4];
    let result = arr.sort().reduce((init, current)=>{
        if(init.length===0 || init[init.length-1]!==current){
            init.push(current);
        }
        return init;
    }, []);
    console.log(result); //[1,2,3,4,5]
    function noRe(arr) {
        var object = {};
        return arr.reduce((init, current)=> {
            if (!object[current]) {
                init.push(current);
                object[current] = 1;
            }
            return init;
        }, [])
    }
    
    
  •  
    var arr1 =[1,2,2,2,3,3,3,4,5,6],
        arr2 = [];
    for(var i = 0,len = arr1.length; i< len; i++){
        if(arr2.indexOf(arr1[i]) < 0){
            arr2.push(arr1[i]);
        }
    }
  • 取数组最大的值
    let result = arr.reduce((init, current)=> {
        if (init < current) {
            return current;
        }
        return init;
    }, 0)

4.object多字段排序

function compareString(a, b) {
    var nameA = a.toUpperCase(); // ignore upper and lowercase
    var nameB = b.toUpperCase(); // ignore upper and lowercase
    if (nameA < nameB) {
        return -1;
    }
    if (nameA > nameB) {
        return 1;
    }
// names must be equal
    return 0;
}
var sources = [{age: 30, name: 'Cinter', JJ: 18},
    {age: 25, name: 'an', JJ: 0},
    {age: 34, name: 'An', JJ: 0},
    {age: 5, name: 'biaoYu', JJ: 1}];

var compare = function (pro, pro2, pro3) {
    return function sort(x, y) {
        var value = x[pro] - y[pro];
        if (value != 0) {
            return value
        }
        value = compareString(x[pro2], y[pro2]);
        if (value != 0) {
            return value
        }
        return x[pro3] - y[pro3]
    }
}
// return Date.parse(a.b) - Date.parse(b.b);
var sorted = sources.sort(compare('JJ', 'name', 'age'));
var mixedNumericArray = ["80", "9", "700", 40, 1, 5, 200];
function compareNumbers(a, b) {
    return a - b;
}
//console.log('Sorted with compareNumbers:'+ mixedNumericArray.sort(compareNumbers));
//---------------数字字符串比较,会将其先转成数字再比较

5.取随机数

function getRandomInt(min, max) {
    min = Math.ceil(min);//向上取整
    max = Math.floor(max);//向下取整
    return Math.floor(Math.random() * (max - min)) + min; //The maximum is exclusive and the minimum is inclusive
}

function getRandomIntInclusive(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min; //The maximum is inclusive and the minimum is inclusive
}

6.this的思考

-------------------闭包中的this,这个好好思考下
var myObject = {
    foo: "bar",
    func: function () {
        var self = this;
        this.i = 12;
        console.log("outer func: this.foo = " + this.foo);
        console.log("outer func: self.foo = " + self.foo);
        console.log("outer func: this.i  = " + this.i);
        console.log("outer func: this  = " + util.inspect(this));

        (function () {
            console.log("inner func: this.foo = " + this.foo);
            console.log("inner func: self.foo = " + self.foo);
            console.log("inner func: this.i  = " + this.i);
            console.log("inner func: this  = " + this);//util.inspect(this)
        }());
    }
}

myObject.func();
console.log(myObject);
//严格模式下,立即执行函数的this 会报错,这里只是为了理解this

7.快速排序

function quickSort(arr) {
    if (arr.length <= 1) {
        return arr
    }
    var pivotIndex = Math.floor(arr.length / 2);
    var pivot = arr.splice(pivotIndex, 1)[0];
    var left = [];
    var right = [];
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] < pivot) {
            left.push(arr[i]);
        } else {
            right.push(arr[i]);
        }
    }
    return quickSort(left).concat([pivot], quickSort(right));
}

8.深拷贝

//可以对javascript中5种主要的数据类型(包括number string object array boolean)进行深拷贝;
//第二种方法就是 var obj2=JSON.parse(JSON.stringify(a)),一句话顶的上下面整个函数...爽不爽.....
function clone(obj) {
    var o;
    switch (typeof obj) {
        case "undefined":
            break;
        case "string":
            o = obj + "";
            break;
        case "number":
            o = obj - 0;
            break;
        case "boolean":
            o = obj;
            break;
        case "object": // object 分为两种情况 对象(Object)或数组(Array)
            if (obj === null) {
                o = null;
            } else {
                //
                //Object.prototype.toString.call(o) === '[object Array]';
                if (Object.prototype.toString.call(obj).slice(8, -1) === "Array") {
                    o = [];
                    for (var i = 0; i < obj.length; i++) {
                        o.push(clone(obj[i]));
                    }
                } else {
                    o = {};
                    for (var k in obj) {
                        o[k] = clone(obj[k]);
                    }
                }
            }
            break;
        default:
            o = obj;
            break;
    }
    return o;
}

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值