Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的交错多个数组_Javascript_Arrays_Interleave - Fatal编程技术网

javascript中的交错多个数组

javascript中的交错多个数组,javascript,arrays,interleave,Javascript,Arrays,Interleave,我们有一个数组,我们希望将其交错到单个数组中: i、 e: masterArray=[[1,2,3],'c','d','e']]=>[1',c',2',d',3',e'] 如果数组长度不相等,请将其填充到最长的innerArray长度 i、 e [1,2,3],[4,5])=>[1,4,2,5,3,null] 对于2个数组的情况,我已经满足了这个条件,但是如果情况比这更严重的话。我努力形成一个策略来处理2个以上的问题 [1,2,3],[4,5,6],[7,8,9]=>[1,4,7,2,5,8,3

我们有一个数组,我们希望将其交错到单个数组中: i、 e:

masterArray=[[1,2,3],'c','d','e']]=>[1',c',2',d',3',e']

如果数组长度不相等,请将其填充到最长的innerArray长度

i、 e [1,2,3],[4,5])=>[1,4,2,5,3,null]

对于2个数组的情况,我已经满足了这个条件,但是如果情况比这更严重的话。我努力形成一个策略来处理2个以上的问题

[1,2,3],[4,5,6],[7,8,9]=>[1,4,7,2,5,8,3,6,9]

function interleave(...masterArray) {
  let rtnArray = [];
  let longestArrayPosition = getLongestArray(masterArray);
  let longestInnerArrayLength = masterArray[longestArrayPosition].length; 
  padAllArraysToSameLength(masterArray, longestInnerArrayLength); //pad uneven length arrays
  
  masterArray[0].forEach((firstArrayNum, index) => {
    const secondArrayNum = masterArray[1][index];
    rtnArray.push(firstArrayNum);
    rtnArray.push(secondArrayNum);
  });

  return rtnArray;
}

function getLongestArray(masterArray) {
  return masterArray
    .map(a=>a.length)
    .indexOf(Math.max(...masterArray.map(a=>a.length)));
}

function padAllArraysToSameLength(masterArray, maxLength) {
  return masterArray.forEach(arr => {
    if (arr != maxLength) {
      while(arr.length != maxLength) {
        arr.push(null);
      }
    }
  })
}
使用
Array.from()
转置数组数组(行=>列,反之亦然),并用
null
填充缺少的位置。使用
Array.flat()
,展平已放置的阵列阵列:

const fn=arr=>Array.from({
长度:Math.max(…arr.map(o=>o.length)),//查找最大长度
},
(u,i)=>arr.map(r=>r[i]??null)//从同一列中的所有项创建新行或用null替换
).flat()//展平结果
常数arr=[[1,2,3],[4,5,6],[7,8,9]]
常数结果=fn(arr)
console.log(result)
使用
Array.from()
转置数组数组(行=>列,反之亦然),并用
null
填充缺少的位置。使用
Array.flat()
,展平已放置的阵列阵列:

const fn=arr=>Array.from({
长度:Math.max(…arr.map(o=>o.length)),//查找最大长度
},
(u,i)=>arr.map(r=>r[i]??null)//从同一列中的所有项创建新行或用null替换
).flat()//展平结果
常数arr=[[1,2,3],[4,5,6],[7,8,9]]
常数结果=fn(arr)

console.log(result)
您可以对具有两个嵌套forEach语句的任意数量的数组执行此操作:

让arr1=[[1,2,3],[4,5]]
设arr2=[[1,2,3],[4,5,6],[7,8,9]]
设arr3=[[1,2,3,4],[4,5,6],[7,8,9],[10,11,12]]
函数交错阵列(mainArr){
设maxLen=Math.max(…mainArr.map(arr=>arr.length))
mainArr.forEach(arr=>{
设lenDiff=maxLen-arr.length
for(设i=lenDiff;i>0;i--){
arr.push(空)
}
})
让newArr=[]
mainArr.forEach((arr,idx1)=>{
arr.forEach((el,idx2)=>{
新阵列[idx2*mainArr.length+idx1]=el
})
})
返回纽瓦尔
}
console.log(交错阵列(arr1))
console.log(交错阵列(arr2))

log(interLeaveArrays(arr3))
您可以使用两个嵌套的forEach语句对任意数量的数组执行此操作:

让arr1=[[1,2,3],[4,5]]
设arr2=[[1,2,3],[4,5,6],[7,8,9]]
设arr3=[[1,2,3,4],[4,5,6],[7,8,9],[10,11,12]]
函数交错阵列(mainArr){
设maxLen=Math.max(…mainArr.map(arr=>arr.length))
mainArr.forEach(arr=>{
设lenDiff=maxLen-arr.length
for(设i=lenDiff;i>0;i--){
arr.push(空)
}
})
让newArr=[]
mainArr.forEach((arr,idx1)=>{
arr.forEach((el,idx2)=>{
新阵列[idx2*mainArr.length+idx1]=el
})
})
返回纽瓦尔
}
console.log(交错阵列(arr1))
console.log(交错阵列(arr2))

console.log(interLeaveArrays(arr3))
什么是下划线和双问号?下划线是第一个参数(值)的占位符,在本例中,该参数始终
未定义,不需要。调用
,如果左侧为
null
未定义
(如果当前数组中不存在索引),它将返回右侧值(
null
)。这允许我们将
未定义的
,而不是0替换为
null
。下划线和双问号是什么?下划线是第一个参数(值)的占位符,在这种情况下,它总是
未定义的
,不需要。调用
,如果左侧为
null
未定义
(如果当前数组中不存在索引),它将返回右侧值(
null
)。这允许我们将
未定义的
,而不是0替换为
null
。您是如何得出:idx2*mainArr.length+idx1作为double forEach中的迭代值的?@helloworld由于元素是交错的,因此需要根据它们在数组中的位置来放置每个元素(
idx2*mainArr.length
)加上它们在自己数组中的位置(
+idx1
)您是如何得出:idx2*mainArr.length+idx1是double forEach中的迭代值的?@helloworld由于元素是交错的,每个元素都需要根据它们在数组中的位置来放置(
idx2*mainArr.length
)加上它们在自己数组中的位置(
+idx1