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');
posted @ 2019-01-17 10:31  孙首富  阅读(1280)  评论(0编辑  收藏  举报