美文网首页
一个含有n个不重复元素的无序数组,将其分割成多个连续的数字数组

一个含有n个不重复元素的无序数组,将其分割成多个连续的数字数组

作者: 郭先生_515 | 来源:发表于2019-02-25 13:31 被阅读0次

    例如:

    let arr = [1,2,3,7,8,9,15,17,18,19,4,12,14,25];
    
    // 得到的结果:
    let result = [ [ 1, 2, 3, 4 ], [ 7, 8, 9 ], [ 12 ], [ 14, 15 ], [ 17, 18, 19 ], [ 25 ] ]
    

    首先数组是无序的,我们要先通过冒泡法将数组变成一个从小到大的有序数组,然后通过js方法将数组切成一段段连续的数组。
    (注:此题要求是无重复元素,若数组中含有重复元素,应先去重。)

    实现代码,如下:

    
    let arr = [1,2,3,7,8,9,15,17,18,19,4,12,14,25];
    
    // 冒泡排序,将数组变成有序数组;
    for (var i = 0; i < arr.length-1; i++) {
        for (var j = 0; j < arr.length-i-1; j++) {
            if (arr[j] > arr[j+1]){
                let tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
    }
    console.log(arr);
    // let arr = [ 1, 2, 3, 4, 7, 8, 9, 12, 14, 15, 17, 18, 19, 25 ];
    
    function splitArr(arr) {
        let result = [], i = 0;
        result[i] = [arr[i]];
        arr.reduce(function(prev, cur){
            cur - prev === 1 ? result[i].push(cur) : result[++i] = [cur];
            return cur;
        })
        console.log(result);
    }
    splitArr(arr);
    

    此例子,用到了ES6数组的新特性 reduce,下面介绍一下 reduce 的用法:

    1. 求和:
    var arr1 = [1, 2, 3, 4];
    var sum = arr1.reduce(function(prev, cur, index) {
        console.log(prev, cur, index);
        return prev + cur;
    }, 2); // 注意这里可以设置初始值,写0,初始值 prev 就是0。
    console.log(arr1, sum);
    
    // 输出结果:
    // 2 1 0
    // 3 2 1
    // 5 3 2
    // 8 4 3
    // [ 1, 2, 3, 4 ] 12
    
    1. 计算数组中每个元素出现的次数:
    let num = [1,2,3,4,5,6,7,5,3,2,1,4,1];
    let nums = num.reduce((prev, cur) => {
        if (cur in prev){
            prev[cur]++;
        }else{
            prev[cur]=1;
        }
        return prev;
    }, {});
    console.log(nums); 
    // { '1': 3, '2': 2, '3': 2, '4': 2, '5': 2, '6': 1, '7': 1 }
    
    1. 数组去重:
    let arr = [1,2,3,4,4,1]
    let newArr = arr.reduce((prev,cur)=>{
        if(!prev.includes(cur)){
          return prev.concat(cur)
        }else{
          return prev;
        }
    },[])
    console.log(newArr);
    // [1, 2, 3, 4]
    
    1. 对象里的属性求和:
    var result = [
        {
            subject: 'math',
            score: 10
        },
        {
            subject: 'chinese',
            score: 20
        },
        {
            subject: 'english',
            score: 30
        }
    ];
    var sum = result.reduce(function(prev, cur) {
        return cur.score + prev;
    }, 0);
    console.log(sum);
    //60
    

    相关文章

      网友评论

          本文标题:一个含有n个不重复元素的无序数组,将其分割成多个连续的数字数组

          本文链接:https://www.haomeiwen.com/subject/vmmwyqtx.html