Javascript 如何从多个连续数组中获取项

Javascript 如何从多个连续数组中获取项,javascript,arrays,indexof,Javascript,Arrays,Indexof,我很难想出解决问题的办法 我试图在数组集合的索引处获取该项。我实际上无法连接数组,它们需要保持分离 通常,要从数组中获取第三项,您需要执行以下操作: function getItemFromJustOneArray(index){ var my_array = [1,2,3,4,5,6]; return my_array[index]; } getItemFromJustOneArray(2); // returns 3 但是,我有一组数组(可以是任意数量的数组),这些数组不能合并成

我很难想出解决问题的办法

我试图在数组集合的索引处获取该项。我实际上无法连接数组,它们需要保持分离

通常,要从数组中获取第三项,您需要执行以下操作:

function getItemFromJustOneArray(index){
  var my_array = [1,2,3,4,5,6];
  return my_array[index];
}

getItemFromJustOneArray(2); // returns 3
但是,我有一组数组(可以是任意数量的数组),这些数组不能合并成一个数组

function getItemFromMultipleArrays(index){

  var array1 = [1,2];
  var array2 = [3,4,5];
  var array3 = [6];

  // I cannot use concat (or similar) to merge the arrays,
  // they need to stay seperate
  // also, could be 3 arrays, but could also be 1, or 5...

  // return 3;

}

getItemFromMultipleArrays(2); // SHOULD RETURN 3
我尝试了一系列在阵列上循环的线路,但我无法真正得到一个有效的解决方案


有人知道这个问题的优雅解决方案吗?

将所有数组嵌套在另一个数组中。然后在该数组上循环,按每个数组的长度递减索引,直到它在当前元素的长度范围内。然后可以返回该嵌套数组的相应元素

函数getItemFromMultipleArrays(索引){ var array1=[1,2]; var array2=[3,4,5]; var array3=[6]; var all_数组=[array1,array2,array3]; var i; 对于(i=0;i=all_array[i]。length;i++){ index-=所有_数组[i]。长度; } if(i<所有数组长度){ 返回所有_数组[i][index]; } }
console.log(getItemFromMultipleArrays(2));//应返回3将所有数组嵌套到另一个数组中。然后在该数组上循环,按每个数组的长度递减索引,直到它在当前元素的长度范围内。然后可以返回该嵌套数组的相应元素

函数getItemFromMultipleArrays(索引){ var array1=[1,2]; var array2=[3,4,5]; var array3=[6]; var all_数组=[array1,array2,array3]; var i; 对于(i=0;i=all_array[i]。length;i++){ index-=所有_数组[i]。长度; } if(i<所有数组长度){ 返回所有_数组[i][index]; } }
console.log(getItemFromMultipleArrays(2));//应该返回3为什么不将数组分散到一个新数组中,并使用索引作为值

函数getItemFromMultipleArrays(索引){ 常数 数组1=[1,2], array2=[3,4,5], 数组3=[6]; 返回[…数组1,…数组2,…数组3][索引]; }
console.log(getItemFromMultipleArrays(2));//3为什么不将数组分散到一个新数组中,并使用索引作为值

函数getItemFromMultipleArrays(索引){ 常数 数组1=[1,2], array2=[3,4,5], 数组3=[6]; 返回[…数组1,…数组2,…数组3][索引]; }
console.log(getItemFromMultipleArrays(2));//3这应该可以做到,只需将所有数组复制到一个“大”数组中并访问它(添加了一个帮助功能)


这应该可以做到,只需将所有数组复制到一个“大”数组中并访问它(添加了一个帮助功能)



如果可以有任意数量的数组,那么它应该是一个二维数组,而不是每个数组都有单独的变量。为什么不能合并它们?可以有一个临时数组来合并所有数组吗?在什么基础上希望返回值为3?如果您有嵌套数组、关联数组或多维数组,该怎么办?您想要这样做的理由不清楚,但是如果您想要一个解决方案,您需要对照数组的长度检查索引,以找到它所在的数组,并根据跳过的数组调整索引。e、 g.
if(索引
或类似的内容……如果可以有任意数量的数组,那么它应该是一个二维数组,每个都不是单独的变量。为什么不能合并它们?是否可以使用一个临时数组来合并所有数组?在什么基础上希望返回值为3?如果您有嵌套数组、关联数组或多维数组,该怎么办?您想要这样做的理由不清楚,但是如果您想要一个解决方案,您需要对照数组的长度检查索引,以找到它所在的数组,并根据跳过的数组调整索引。e、 g.
if(索引
或类似的内容,则无需嵌套,也无需对数组进行更显式的编码。如果存在任意数量的阵列,此解决方案效果更好。如果显式数组的数量有限,那么对数组进行显式编码检查可能会更好。问题是“可以是3个数组,但也可以是1个或5个…”。所以它似乎需要对任意数字起作用。谢谢Barmar,你的回答非常有用!是的,它需要在任意数量下工作。再次感谢:-)可以做到这一点,而无需嵌套和对数组进行更显式的编码。如果存在任意数量的阵列,此解决方案效果更好。如果显式数组的数量有限,那么对数组进行显式编码检查可能会更好。问题是“可以是3个数组,但也可以是1个或5个…”。所以它似乎需要对任意数字起作用。谢谢Barmar,你的回答非常有用!是的,它需要在任意数量下工作。再次感谢:-)他写道:“这些数组不能合并为一个。”。这就是你用省略号所做的。也许这是一个编码挑战,创建组合数组会太大。嗨,你的第二个anwser对我很有帮助!谢谢。如果我能标出两个正确答案,我会的。(只是我更喜欢循环,仅此而已)。再次感谢!他写道:“这些数组不能合并为一个。”。这就是你用省略号所做的。也许这是一个编码挑战,创建组合数组会太大。嗨,你的第二个anwser对我很有帮助!谢谢。如果我是c
// this function takes any amount of arrays and returns a new
// "concatted" array without affecting the original ones.
function connectArrays(...arrays) {
  return [...arrays.flat()];
}

function getItemFromMultipleArrays(index) {
  var array1 = [1,2];
  var array2 = [3,4,5];
  var array3 = [6];
  var allArrays = connectArrays(array1, array2, array3);
  
  return allArrays[index];
}

getItemFromMultipleArrays(2); // SHOULD RETURN 3