代码之家  ›  专栏  ›  技术社区  ›  jayanes

如何使用javascript分隔主组数组中的每个子组

  •  0
  • jayanes  · 技术社区  · 6 年前

    我有一个数组。它包含几个子组。例子:

    let mainArray=[50,51,52,53,54,511,512,513,514,521,522,523,524,525,526,527]
    

    我想把主数组分成子数组-数组。用于例子

    sub1 =[50,51,52,53,54]
    sub2 =[511,512,513,514]
    sub3 =[521,522,523,524,525,526,527]
    

    你能帮助我吗?

    3 回复  |  直到 6 年前
        1
  •  2
  •   HBP    6 年前

    使用Array reduce函数:

    let mainArray=[50,51,52,53,54,511,512,513,514,521,522,523,524,525,526,527];
    
    let groups = mainArray.reduce ( 
      (grps, el, i, main) => ((el === main[i-1] + 1 ? grps[0].push (el)
                                                    : grps.unshift ([el])), grps), []);
    
    [sub3, sub2, sub1] = groups;
    
    console.log (sub1, sub2, sub3);
        2
  •  2
  •   Cata John user9639836    6 年前

    const arr = [50,51,52,53,54, 511,512,513,514, 521,522,523,524,525,526,527];
    let newArr = [];
    let temp = [arr[0]];
    
    for (let index = 1; index < arr.length; index++) {
      if (arr[index] == arr[index - 1] + 1) {
        temp.push(arr[index]);
      } else {
        newArr.push(temp);
        temp = [];
      }
      
      if (index == arr.length - 1) {
        newArr.push(temp);
      }
    }
    
    console.log(newArr)
        3
  •  1
  •   Rafael Herscovici    6 年前

    var arr = [50,51,52,53,54,511,512,513,514,521,522,523,524,525,526,527];
    var result = [],
        lastVal = -1;
    while(arr.length) {
      var currentIndex = arr.length - 1;
      var currentValue = arr[currentIndex];
      var c = Math.floor(currentValue/10);
      if (c !== lastVal) {
        lastVal = c;
        result.push([currentValue]);
      }else{
        result[result.length-1].push(currentValue);
      }
      arr.splice(currentIndex, 1);
    }
    result.forEach(function(arr){ arr.reverse(); });
    console.log(result);
        4
  •  0
  •   Chris Vouga    5 年前

    下面是一个使用拉姆达.js

    const x = [50,51,52,53,54,511,512,513,514,521,522,523,524,525,526,527]
    
    const f = R.pipe(
      R.sortBy(R.identity), 
      R.groupWith(R.pipe(R.subtract, Math.abs, R.equals(1)))
    )
    
    console.log(f(x))
    <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>