【问题标题】:Sorting a multidimensional array in javascript?在javascript中对多维数组进行排序?
【发布时间】:2017-11-09 21:25:27
【问题描述】:

我是编程新手,我刚刚使用纯 JavaScript 解决了一个多维数组问题,但我认为我把它弄得太复杂了,我想知道有人能告诉我你如何看待我的方法吗?你有更好的方法吗?方法来做到这一点。 问题是控制台记录数组中的所有数字,数组是[[[1,2],[3,4]],[[5,6]]]。我的代码如下,请发表您的建议,谢谢

     var nestedArr = [[[1,2],[3,4]],[[5,6]]];
     var nestedArrOne = nestedArr[0];
     var nestedArrTwo = nestedArr[1];
     var newArr = nestedArrOne.concat(nestedArrTwo);
      function showAll(){
        for(var i=0; i<newArr.length; i++){
        for(var j=0; j<newArr[i].length; j++){
        console.log(newArr[i][j]);
                }
            }
       }

       showAll();

【问题讨论】:

  • 这被称为“扁平化”,而不是围绕这些部分“排序”;)查找。
  • 嗨@Sen123 我相信,你应该把问题发到LINK
  • 您的代码有几个问题,但可以从以下问题着手:当您将索引传递给数组时,您将获得数组中的下一项,而不是下一个嵌套级别。所以nestedArr 里面只有一个项目[[1,2],[3,4],[5,6]] 这是nestedArr[0] - nestedArr[1] 什么都不是。
  • 顺便说一句,你没有排序。

标签: javascript arrays sorting for-loop multidimensional-array


【解决方案1】:

您可以迭代嵌套数组并检查项目是否为数组,然后再次为内部数组调用该函数。

function iter(array) {
    var i;                               // declare index
    for (i = 0; i < array.length; i++) { // iterate array
        if (Array.isArray(array[i])) {   // check if item is an array
            iter(array[i]);              // if so, call iter with item
            continue;                    // and continue the loop
        }
        console.log(array[i]);           // the wanted output
    }
}

var nestedArr = [[[1, 2], [3, 4]], [[5, 6]]];
iter(nestedArr);

【讨论】:

    【解决方案2】:

    递归函数可用于展平数组。

    let isArray = val => val.constructor === Array
    
    let log = val => console.log(val)
    
    let flatten = val =>
      val
        .reduce((acc, cur) =>
          isArray(cur) ? [...acc, ...flatten(cur)] : [...acc, cur],
          [])
    
    
    // Running examples
    let arrA = [[[1,2],[3,4]],[[5,6]]]
    flatten(arrA).forEach(log)
    
    log('-------------------')
    
    let arrB = [[[1,2],[3,4]],[[5,6]],[7],[[[[9]]]]]
    flatten(arrB).forEach(log)

    【讨论】:

      【解决方案3】:

      一个花哨的 Haskellesque 方法与 “休息运算符的模式匹配” 可能是。

      var flat = ([x,...xs]) => x ? [...Array.isArray(x) ? flat(x) : [x], ...flat(xs)] : [];
          na   = [[1,2],[3,[4,5]],[6,7,[[[8],9]]],10];
          fa   = flat(na);
      console.log(...fa);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-23
        • 2012-11-27
        • 2014-01-19
        • 1970-01-01
        • 2015-07-11
        • 2023-01-11
        相关资源
        最近更新 更多