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');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章