我们有一个数组的数组,想要将它们交错成一个单一的数组:
例如:
masterArray = [[1, 2, 3], ['c', 'd', 'e']] => [1, 'c', 2, 'd', 3, 'e'],
如果内部数组长度不相等,则将它填充到最长的内部数组的长度。
例如: [1, 2, 3], [4, 5]) => [1, 4, 2, 5, 3, null]
我已经满足了两个数组的情况,但如果是更多的情况,我很难形成处理多于两个的策略。
例如: [1, 2, 3], [4, 5, 6], [7, 8, 9] => [1, 4, 7, 2, 5, 8, 3, 6, 9]
masterArray = [[1, 2, 3], ['c', 'd', 'e']] => [1, 'c', 2, 'd', 3, 'e'],
如果内部数组长度不相等,则将它填充到最长的内部数组的长度。
例如: [1, 2, 3], [4, 5]) => [1, 4, 2, 5, 3, null]
我已经满足了两个数组的情况,但如果是更多的情况,我很难形成处理多于两个的策略。
例如: [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);
}
}
})
}
undefined
,并且不需要。??
被称为Nullish 合并运算符,如果左侧为null
或undefined
(在当前数组上索引不存在的情况),它将返回右侧的值(在本例中为null
)。这使我们能够用null
替换undefined
,但不能替换0。 - Ori Drori