Javascript 联接多个顺序索引数组

Javascript 联接多个顺序索引数组,javascript,arrays,indexing,Javascript,Arrays,Indexing,我有多个索引数组,表示一个顺序: [[0,1,2], [2,0,1], [1,2,0], [0,1,2], ...] 我需要构造一个新的索引数组,其长度等于输入中的索引总数,同时使用输入中每个数组中指示的位置对值进行排序 这将是上述输入的输出: [0, 1, 2, 5, 3, 4, 7, 8, 6, 9, 10, 11, ...] 总长度为12,因此索引列表将包含0-11 输入的第一个数组是0,1,2,因此输出从0,1,2开始 输入的第二个数组是2、0、1,新列表中接下来的3个索引是3-5

我有多个索引数组,表示一个顺序:

[[0,1,2], [2,0,1], [1,2,0], [0,1,2], ...]
我需要构造一个新的索引数组,其长度等于输入中的索引总数,同时使用输入中每个数组中指示的位置对值进行排序

这将是上述输入的输出:

[0, 1, 2, 5, 3, 4, 7, 8, 6, 9, 10, 11, ...]
  • 总长度为12,因此索引列表将包含0-11
  • 输入的第一个数组是0,1,2,因此输出从0,1,2开始
  • 输入的第二个数组是2、0、1,新列表中接下来的3个索引是3-5。使用5,3,4中输入结果的第二个数组对它们进行排序
  • 等等

    • 我对您的示例感到困惑,但听起来您想将阵列展平一级。您可以这样做:

      var数组=[[0,1,2],[2,0,1],[1,2,0],[0,1,2];
      var result=[].concat.apply([],数组);
      
      控制台日志(结果)输入和输出示例令人困惑,但我认为您想要的是:

      var array = [...] // your array
      var result = Array.prototype.concat.apply([], array);
      
      您可以使用、和实际数组的长度进行计数。然后将到目前为止的所有长度和内部数组的值之和推送到结果集

      var数组=[[0,1,2]、[2,0,1]、[1,2,0]、[0,1,2]],
      结果=[];
      array.reduce(函数(r,a){
      a、 forEach(函数(b){
      结果:推送(r+b);
      });
      返回r+a.length;
      }, 0);
      控制台日志(结果)
      
      .as console wrapper{max height:100%!important;top:0;}
      我相信我根据预期的输出解释了您的问题,并相应地编辑了问题

      您需要循环输入中的子数组,并获取输出的下一组索引,然后使用子数组的顺序将这些索引添加到输出中

      这似乎起到了作用:

      var input = [[0, 1, 2], [2, 0, 1], [1, 2, 0], [0, 1, 2]];
      
      var output = [];
      
      // add values to the output for each of the inputs
      $.each(input, function (index, value) {
          // get the next and last values to add
          var startIndex = output.length;
          var lastIndex = (startIndex + value.length) - 1;
      
          // make an array of sequential values from startIndex to lastIndex
          var arrayToAdd = [];
          for (var i = startIndex; i <= lastIndex; i++) {
              arrayToAdd.push(i);
          }
      
          // add the values from arrayToAdd in the order of the indexes in the input
          $.each(value, function (innerindex, innerindexvalue) {
              output.push(arrayToAdd[innerindexvalue]);
          });
      
      });
      
      console.log(output);
      
      var输入=[[0,1,2]、[2,0,1]、[1,2,0]、[0,1,2];
      var输出=[];
      //为每个输入的输出添加值
      $.each(输入、函数(索引、值){
      //获取要添加的下一个和最后一个值
      var startIndex=output.length;
      VarLastIndex=(startIndex+value.length)-1;
      //创建从startIndex到lastIndex的顺序值数组
      var arrayToAdd=[];
      
      对于(var i=startIndex;i为什么第二个数组包含完全不同的值?您需要提供映射示例。输出不应该是“[0,1,2,2,0,1,1,2,0,0,1,2…”??可能需要将多个有序索引数组连接到一个数组中,并考虑这些索引的顺序。用一个实际有意义的例子更新你的问题。是的,我想这就是他的意思,但他的细节令人困惑。小心
      数组
      vs
      数组
      @bejado谢谢你的关注,没有看到吗事实上,这不是重复。谢谢,接受了这个答案,因为更少的loc。IsNull的答案也可能是正确的。稍后将尝试。也谢谢大家的努力。大多数人没有得到它,因为结果是一个新数组,包含从输入数组编码的新元素,而不仅仅是数组合并。谢谢IsNull,也谢谢编辑,我真的不知道h如何解释。我接受了Nina的答案,只是因为减少了loc。但我以后会尝试这个。谢谢!这是更简洁的代码。我采用了详细的方法来更清楚地解释步骤。