【发布时间】:2019-09-08 00:48:17
【问题描述】:
我想将两个排序数组合并为一个排序数组,例如[1, 3, 6, 7, 11] 和 [2, 3, 5, 8, 9, 10] 合并成为 [1, 2, 3, 3, 5, 6, 7, 8, 9, 10, 11 ]。但是,我想在没有任何 JavaScript 数组方法(如 .push() 或 .concat() )的情况下执行此操作,因此我更加熟悉这些方法中的底层逻辑。这是我的代码。
const array1 = [1, 3, 6, 7, 11];
const array2 = [2, 3, 5, 8, 9, 10];
const set = (arr, index, value) => {
return arr[index] = value;
}
const mergeArrs = (arr1, arr2) => {
let loopLength = arr1.length >= arr2.length ? arr1.length :
arr2.length;
let mergedArr = [];
for (let i = 0; i < loopLength; i++) {
if (arr1[i] <= arr2[i]) {
console.log(i);
mergedArr = [...mergedArr, set(mergedArr, i, arr1[i]), set(mergedArr, i + 1, arr2[i])];
} else {
console.log(i);
mergedArr = [...mergedArr, set(mergedArr, i, arr2[i]), set(mergedArr, i + 1, arr1[i])];
}
}
return mergedArr;
}
mergeArrs(array1, array2);
这是控制台的输出:
0
1
2
3
4
5
=> [ 1, 2, 3, 3, 5, 6, 7, 8, 9, 11, 10, undefined ]
我认为我的函数的某些部分是正确的,但是我遇到了诸如数组仅相对于其原始位置进行合并/排序的问题。例如。 arrayOne[4] = 11 和 arrayTwo[4] = 9,所以一开始,它是正确的 [..., 9, 11, ...] 但是因为 arrayOne 没有索引 5 而 arrayTwo 有, arrayTwo[5] = 10,10 在 11: [..., 9, 11, 10, undefined] 之后附加到数组上,并且 undefined 在那里,因为第一个数组没有索引 5 所以它是未定义... idk...我似乎无法得到这个:(
非常感谢任何帮助,谢谢
【问题讨论】:
-
请注意,使用 [2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15] 和 [1, 4, 9, 16, 25] 等值,您需要两个独立的指示,即使在到达任一数组的末尾之前,每个数组的处理量也是如此。
标签: javascript arrays algorithm loops