• JS开发中常用的小技巧


    1、获取指定范围内的随机数

    1
    2
    3
    function getRadomNum(min,max){
        return  Math.floor(Math.random() * (max - min + 1)) + min;
    }

    2、随机获取数组中的元素

    1
    2
    3
    4
    function getRadomFromArr(arr){
        return arr[Math.floor(Math.random()*arr.length)];
    }
        

    3、生成从0到指定值的数字数组 

    1
    2
    3
    4
    5
    function getArray(len) {
        var arr = [],i = 1;
        for (; arr.push(i++) < len;);
        console.log(arr)
    }

    等同于:

    1
    2
    3
    4
    5
    6
    7
    function getArray(len) {
        var arr = [],i = 1;
        for (; i < len; i++) {
            arr.push(i)
        }
        console.log(arr)
    }

    4、打乱数字数组的顺序

    1
    2
    3
    4
    var arr = [1, 2, 3, 4, 5, 6, 7, 'a''dsfs', 8, 9, 'v'];
    arr.sort(function() {
        return Math.random() - 0.5
    });

    5、对象转换为数组

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //注意对象必须是以下格式的才可以通过此方式转化为数组
    //获取的DOM集合,以及函数的arguments也可以通过此方式转化为数组
    var obj = {
        0: 'qian',
        1: 'long',
        2: 'chu',
        3: 'tian',
        length: 4
     
    }
    var objArr = Array.prototype.slice.call(obj);
    // var objArr = [].slice.call(obj);
    // var objArr = Array.prototype.slice.apply(obj);
    console.log(objArr)

    6、验证是否为数组

    1
    2
    3
    function isArray(obj) {
        return Object.prototype.toString.call(obj) === '[object Array]';
    }

    7、获取数组中最大或者最小值 

    1
    2
    3
    4
    5
    6
    function maxAndMin(arr){
        return {
           max:Math.max.apply(null,arr.join(',').split(',')),
           min:Math.min.apply(null,arr.join(',').split(','))
        }
    }

    8、清空数组

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //方式一 通过将长度设置为0
    var arr = [1, 2, 3, 4, 5];
    arr.length = 0;
     
    //方式二 通过splice方法
    var arr = [1, 2, 3, 4, 5];
    arr.splice(0, arr.length);
     
    //方式三 通过将空数组 [] 赋值给数组(严格意义来说这只是将ary重新赋值为空数组,之前的数组如果没有引用在指向它将等待垃圾回收。)
    var arr = [1, 2, 3, 4, 5];
    arr = [];

    9、保留指定小数位

    1
    2
    var num =4.345678;
    num = num.toFixed(4);  // 4.3457 第四位小数位以四舍五入计算

    10、生成指定长度的随机字母数字字符串

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // 生成指定长度的随机字母数字字符串
    /*写法一
    function getRandomStr(len) {
        var str = "";
        for (; str.length < len; str += Math.random().toString(36).substr(2));
        return str.substr(0, len);
    }
    写法二
    function getRandomStr(len) {
        var str = "";
        for (; str.length < len;) {
            str += Math.random().toString(36).substr(2);
        }
        return str.substr(0, len);
    }*/
    /*写法三*/
    function getRandomStr(len) {
        for (var str = ''; str.length < len; str += Math.random().toString(36).substr(2));
        return str.substr(0, len)
    }

    11、找出数组中出现次数最的元素,并给出其出现过的位置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    function getMaxAndIndex(arr) {
        var obj = {};
        arr.forEach(function(item, index) {
            if (!obj[item]) {
                obj[item] = {
                    indexs: [index]
                }
            else {
                obj[item]['indexs'].push(index);
            }
        });
        var num = 0; //记录出现次数最大值
        var str = ''//记录出现次数最多的字符
        var reArr; //返回最大值的位置数组
        for (var attr in obj) {
            var temp = obj[attr]['indexs'];
            if (temp.length > num) {
                num = temp.length;
                str = attr;
                reArr = temp;
            }
        }
        return {
            maxStr: str,
            indexs: reArr
        }
    }

    一、简单一维数组的去重:

    简单一维数组的去重方法有很多,这种数组里面的值都是普通的数据类型,并没有对象,因此去重方法有很多,这里总结一下常用的四种方法(网上还有一些其它的方法):
    方法一:双层循环去重

    function uniqueArr(arr) {
        var result = [];
        for (var i = 0; i < arr.length; i++) {
            for (var j = i + 1; j < arr.length; j++) {
                if (arr[i] === arr[j]) {
                    j = ++i;
                }
            }
            result.push(arr[i]);
        }
        return result;
    }

    方法二:利用对象的属性不能相同去重

    function uniqueArr(arr) {
        var result = [];
        var obj = {};
        for (var i = 0; i < arr.length; i++) {
            if (!obj[arr[i]]) {
                obj[arr[i]] = 1;
                result.push(arr[i]);
            }
        }
        return result;
    }

    方法三:利用下标

    function uniqueArr(arr) {
        var result = [arr[0]];
        for (var i = 1; i < arr.length; i++) {
            if (result.indexOf(arr[i]) == -1) {
                result.push(arr[i]);
            }
        }
        return result;
    }

    方法四:ES6去重

    function uniqueArr(arr) {
        return Array.from(new Set(arr));
    }

    二、包含对象的二维数组去重:

    假设有这样的一个二维数组,数组里面多个对象的属性至少有一个都一样,那就该如何去除重复的数据呢?这里总结一下两种方法:
    方法一:双重循环去除法

    function uniqueArr(arr, key) {
        var newArr = [];
        for (var i = 0; i < arr.length; i++) {
            var flag = true;
            for (var j = 0; j < newArr.length; j++) {
                if (arr[i][key] == newArr[j][key]) {
                    flag = false;
                }
            }
            if (flag) newArr.push(arr[i]);
        }
        return newArr;
    }

    方法二:利用reduce来实现

    function uniqueArr(arr, key) {
        var hash = {};
        return arr.reduce(function(item, next) {
            hash[next[key]] ? '' : hash[next[key]] = true && item.push(next);
            return item
        }, []);
    }

    例子:

    var arr = [{
            id: '001',
            name: 'Jack'
        },
        {
            id: '002',
            name: 'Eric'
        },
        {
            id: '003',
            name: 'Tom'
        },
        {
            id: '003',
            name: 'Lucy'
        },
        {
            id: '002',
            name: 'Lucy'
        },
        {
            id: '004',
            name: 'Jacky'
        },
    ]
    uniqueArr(arr, 'id');
  • 相关阅读:
    AttributeError: module 'tensorflow' has no attribute 'placeholder'问题
    反转二叉树
    Tensorflow 报错No module named 'tensorflow.examples.tutorials'解决办法
    合并二叉树
    二叉树的最大深度
    数组中的字符串匹配
    分别用js,css,html实现三个不同颜色的文字拼接
    删除回文子序列
    上手Typescript,让JavaScript适用于大型应用开发
    js 空数组是true还是false
  • 原文地址:https://www.cnblogs.com/sunshq/p/10280895.html
Copyright © 2020-2023  润新知