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。但我以后会尝试这个。谢谢!这是更简洁的代码。我采用了详细的方法来更清楚地解释步骤。