javascript - 用'for'循环合并两个排序数组......如何阻止'i'在循环结束时增加
问题描述
我想将两个排序数组合并为一个排序数组,例如 [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......我似乎无法得到这个:(
我真的很感激任何帮助,谢谢
解决方案
对您的代码进行了一些更改,它现在可以工作了。
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;
let mergedArr = [];
for (let i = 0; i <= loopLength; i++) {
if (arr1.length && arr2.length) {
if (arr1[0] <= arr2[0])
mergedArr = [...mergedArr, set(mergedArr, i, arr1.shift())];
else
mergedArr = [...mergedArr, set(mergedArr, i, arr2.shift())];
}
else if (arr1.length) {
mergedArr = [...mergedArr, set(mergedArr, i, arr1.shift())];
}
else if (arr2.length) {
mergedArr = [...mergedArr, set(mergedArr, i, arr2.shift())];
}
}
return mergedArr;
}
console.log(mergeArrs(array1, array2));
推荐阅读
- firebase - 如何将 Cloud Firestore 与 Gin 框架连接起来?
- oracle - ORA-00936: 缺少表达式 -- codeigniter
- vue.js - twitter:图像对于 Vue.js 应用程序不可见
- java - 我的代码有什么错误?我试图从 2 天开始理解它?
- javascript - 我正在尝试在 Node.Js 上调用 QuickBook 的 API,但我收到以下错误
- reactjs - useContext 中的 useReducer 不保存状态
- r - 函数只计算 df 的第一行
- mysql - 如何在 typeorm querybuilder 中编写特定的原始查询
- html - 如何将 Flask-WTForms 与联系表单的 HTML 模板连接起来?
- python - 如何在 docker-compose 中设置和调用“awslogs”?