JS数组高级操作(上)

转载自 JS面试之数组的几个不low操作(3) ,点击查看原文

1. 数组扁平化

  • 高级操作

    1
    2
    var arr1 = [1,2,3,[4,5,[6,7,8]]]
    var arr_1 = arr1.flat(Infinity)
  • 常规操作:利用递归和数组合并方法 concat实现扁平。

    1
    2
    3
    4
    5
    6
    function flatten(arr) {
    while(arr.some(item=>Array.isArray(item))) {
    arr = [].concat(...arr);
    }
    return arr;
    }

2. 去重

  • 高级操作(两种方法)

    1
    2
    var arr1 = [1,2,3,3]
    arr_1 = [...new Set(arr1)]
    1
    2
    3
    4
    var arr1 = [1,2,3,3]
    arr_1 = Array.from(
    new Set(arr1)
    )

    Array.from() 可以将类数组转换为数组,类数组包括但又不限于 Set/ Map,还有包括可遍历的对象。

    Set 是ES6提供的新的数据结构,Set对象不是数组, 可以用来保存对象或者基本类型, 所有保存的值都是唯一的。这也就是我们要使用这一特性,实现去重。

  • 常规操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function distinct(arr) {
    let resule = [], i, j;
    for (i = 0; i < arr.length; i++) {
    for (j = i+1; j < arr.length; j++) {
    if(arr[i] === arr[j]){
    j = ++i
    }
    }
    resule.push(arr[i])
    }

    return resule
    }

3. 排序

  • 高级操作

    1
    2
    var arr1 = [1,2,4,3,8,5]
    arr1.sort() //升序
    1
    2
    var arr1 = [1,2,4,3,8,5]
    arr1.sort((a, b) => b - a) //降序
  • 常规操作

    选择排序:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function sortFun(arr) { // 选择排序
    let i, j;
    for (i = 0; i < arr.length; i++) {
    for (j = i+1; j < arr.length; j++) {
    if(arr[i] < arr[j]){
    [arr[i], arr[j]] = [arr[j], arr[i]]
    }
    }
    }
    return arr
    }

    冒泡排序:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function bubleSort(arr) { //冒泡排序
    let i, j;
    for (i = arr.length-1; i > 2; i--) {
    for (j = 0; j < i; j++) {
    if(arr[i] > arr[j]){
    [arr[i], arr[j]] = [arr[j], arr[i]]
    }
    }
    }
    return arr
    }

4. 最大值、最小值

  • 高级操作

    1
    2
    3
    var arr1 = [1,2,4,3,8,5]
    Math.max(...arr1)
    Math.min(...arr1)

    Math.max() 方法可返回两个指定的数中带有较大的值的那个数

    1
    2
    3
    4
    5
    var arr1 = [1,2,4,3,8,5]
    arr1.reduce((prev, cur, curIndex, arr) => {
    return Math.max(prev,cur);
    //return Math.min(prev,cur);
    })
  • 常规操作: 先排序,再取最大/最小值。

5. 求和

  • 高级操作

    1
    2
    3
    arr1.reduce((prev, cur, curIndex, arr) => {
    return prev + cur
    })
  • 常规操作

    1
    2
    3
    4
    5
    6
    7
    function sumFun(arr){
    let sum = 0, i;
    for (i = 0; i < arr.length; i++) {
    sum += arr[i]
    }
    return sum
    }

转载自 JS面试之数组的几个不low操作(3) ,点击查看原文

-------------本文结束感谢您的阅读-------------

本文标题:JS数组高级操作(上)

文章作者:老米的世界

发布时间:2019年04月08日 - 00:00

最后更新:2019年09月05日 - 22:06

原始链接:http://mpfly.github.io/2019/04/08/JS数组高级操作(上)/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

老米的世界 wechat
欢迎关注我的微信公众号!
坚持原创技术分享,您的支持将鼓励我继续创作!