JS实用技巧(五)

作者 BiYuqi 日期 2017-02-04
JS实用技巧(五)

该系列文章主要记录自己平常所用,js一些技巧,作为知识的积累。

实现数组原生翻转reverse()方法

function reverse(arr){
    //方法1
    var s = JSON.stringify(arr),//序列化
        o = [],
        reg = /(\w)+/g;//提取规则
    while(match = reg.exec(s)){
        //循环提取匹配
        o.unshift(match[0]);
    }
    return o;
    //方法2
    var o = [];
    for(var i=0;i<arr.length;i++){
        o.unshift(arr[i]);
    }
    return o;
}
//test:
var arrSt = ["bi","yu","qi","to","be","an"];
var res = reverse(arrSt);
console.log(res);//["an", "be", "to", "qi", "yu", "bi"]

根据传进去的对象,返回所有key为id的value

function areaIds(data){
    var str = JSON.stringify(data),
        // reg = /\"id\":([^,])/g,
        reg = /\"id\":(\d)/,
        arr = [];
    while(match = reg.exec(str)){
        arr.push(match[1]);
    }
    return arr;
}
//test
var dd = {
    id:1,
    items:[
        {id:2},
        {id:3,items:[
            {id:4},
            {id:5}
        ]}
    ]
}
var d = areaIds(dd);
console.log(d);//["1", "2", "3", "4", "5"]

根据第一个参数array返回number数量的数的和

/*
* var values = [2,3,32,8,5]
* minSum(values, 2); // => 2+3 = 5
* maxSum(values, 3); // => 32+8+5 = 45
*
*/
var testArr = [2,3,32,8,5];

function minSum(val,num){
    var sum = 0;
    val.sort(function(a,b){
        return a - b;
    });
    for(let i=0;i<num;i++){
        sum += val[i];
    }
    return sum;
}
var mini = minSum(testArr,2);
console.log(mini);//5

function maxSum(val,num){
    var sum = 0;
    val.sort(function(a,b){
        return b - a;
    });
    for(let i=0;i<num;i++){
        sum += val[i];
    }
    return sum;
}
var maxi = maxSum(testArr,3);
console.log(maxi);//45

实现数组拷贝累加

//[1,2,3,4,5].duplicator(); // [1,2,3,4,5,1,2,3,4,5]
Array.prototype.duplicator = function() {
    //第一种方法
    var temp = this;
    temp = temp.join(',')+','+temp.join(',');
    return temp.split(',');
    //第二种
    var o = this.slice();
    for(var i=0;i<this.length;i++){
        o.push(this[i]);
    }
    return o;
    //第三种 最简便
    return this.slice().concat(this);
}
console.log([1,2,3,4,5].duplicator());
//[1,2,3,4,5,1,2,3,4,5]