gpt4 book ai didi

javascript - 使用 'for' 循环合并两个排序数组...如何在循环结束时阻止 'i' 增加

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:29:08 25 4
gpt4 key购买 nike

我想将两个排序数组合并为一个排序数组,例如[1, 3, 6, 7, 11] 和 [2, 3, 5, 8, 9, 10] 合并成为 [1, 2, 3, 3, 5, 6, 7, 8, 9, 10, 11 ].但是,我想在没有任何 .push() 或 .concat() 之类的 javascript 数组方法的情况下执行此操作,因此我更加熟悉这些方法中的底层逻辑。这是我的代码。

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,所以它是undefined...idk...我似乎无法理解 :(

非常感谢任何帮助,thx

最佳答案

您可以采用一些 while 循环,因为您可以独立检查索引并根据需要推送值,并为推送的值递增索引。

第一个 while 循环检查两个索引并包含一个检查以获得更小的值。

另外两个 while 循环都是将剩余值添加到 merged 数组所必需的。

var array1 = [1, 3, 6, 7, 11],
array2 = [2, 3, 5, 8, 9, 10],
merged = [],
i = 0,
j = 0;

while (i < array1.length && j < array2.length) {
if (array1[i] < array2[j]) {
merged = [...merged, array1[i++]];
continue;
}
merged = [...merged, array2[j++]];
}

while (i < array1.length) merged = [...merged, array1[i++]];
while (j < array2.length) merged = [...merged, array2[j++]];

console.log(...merged);

另一种方法

function merge([v, ...a], [w, ...b]) {
return v < w
? [v, ...(a.length ? merge(a, [w, ...b]) : [w, ...b])]
: [w, ...(b.length ? merge([v, ...a], b) : [v, ...a])];
}

console.log(...merge([1, 3, 6, 7, 11], [2, 3, 5, 8, 9, 10]));

关于javascript - 使用 'for' 循环合并两个排序数组...如何在循环结束时阻止 'i' 增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55733194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com