gpt4 book ai didi

javascript - 我的 JavaScript 数字排序器的三个问题

转载 作者:行者123 更新时间:2023-11-29 23:18:25 25 4
gpt4 key购买 nike

到目前为止,我在使用 JavaScript 中的数字排序功能时遇到了 3 个问题。

  1. 我数组中的一个数字显示为空。不知道为什么会这样,因为它只发生一次,其余时间完全相同的数字显示正常。

  2. 我将一个数组中所有最小的数字拼接起来,然后将它们插入另一个数组,这样我就只剩下数组中最大的数字了,我不确定如何将其插入新数组。我试过了

if(array.length <= 1){newArray.push(array[0]);

  1. 如果我尝试对“数字”数组以外的任何其他数组进行排序,那么我会导致浏览器崩溃并收到 NS_ERROR_FAILURE。例如,如果我尝试对“numbersTwo”进行排序。

这是我的代码:

let numbers = [5, 123, 12, 11, 668, 4345, 7688, 65, 333, 221, 545, 7788, 908];

let numbersTwo = [5, 4, 75, 53, 22, 3, 765, 1, 5, 10];

let sortedNumbers = [];

console.log(numbers);

function remove(arrayToSplice, item) {
let array = arrayToSplice;
let index = array.indexOf(item);
if (index > -1) {
array.splice(index, 1);
}
}

function sortNumbers(array, newArray) {
for (let i = 0; i < array.length; i++) {
let numberToCompare = array[i];
document.writeln("<br> I " + array[i] + " <br>");

for (let j = 0; j < array.length; j++) {
document.writeln("J " + array[j] + ", ");

if (array[j] < numberToCompare) {
numberToCompare = array[j];
document.write("<br> The comparison number is now " + numberToCompare + "<br>");
i--;
}
}

if (!newArray.includes(numberToCompare)) {
document.write("<br>" + numberToCompare + " gets pushed <br>");
newArray.push(numberToCompare);
// After I have pushed this, I want to remove it.
remove(array, numberToCompare);
}
}
}

sortNumbers(numbers, sortedNumbers);
console.log(numbers);
console.log(sortedNumbers);

最佳答案

问题 1:您得到 undefined 的原因是因为您每次更改比较数字时都会递减 i。如果你这样做的次数足够多,i 就会变成 -2。下一次外循环重复时,将 i 递增到 -1,然后执行 numberToCompare = array[i];,返回 undefined 因为数组中没有 -1 元素。您可以检查是否低于 -1 并跳过递减。

不过,我不太确定此时您为什么要递减 i。我认为你实际上应该在从数组中删除元素时这样做,如果删除的元素在 i 之前,因为当发生这种情况时,所有剩余的索引都会向下移动,你需要备份以处理下一个元素。理想情况下,您应该返回被删除的索引,检查它是否低于 i,并且在这种情况下仅递减 i

问题 2:当您到达最后两个元素时,将较小的元素插入 newArray,然后递增 i。它达到 array.length,因此循环停止并且您不处理最后一个元素。您可以将最后一个元素压入函数末尾。

问题 3:numbersTwo 有一个重复的元素 5。您只需将一个值压入 newArray 并从 array 中删除它(如果它不存在于 newArray 中)。所以第二个 5 留在数组中,循环永远不会结束。如果你只想要结果中的独特元素,你可以跳过推送值,但仍然删除它。如果结果中有重复项是可以的,您可以完全摆脱 if (newArray.includes(numberToCompare)) 检查。

let numbers = [5, 123, 12, 11, 668, 4345, 7688, 65, 333, 221, 545, 7788, 908];

let numbersTwo = [5, 4, 75, 53, 22, 3, 765, 1, 5, 10];

let sortedNumbers = [];

console.log(numbers);

function remove(arrayToSplice, item) {
let array = arrayToSplice;
let index = array.indexOf(item);
if (index > -1) {
document.writeln("Splice out index " + index + "<br>");
array.splice(index, 1);
}
return index;
}

function sortNumbers(array, newArray) {
for (let i = 0; i < array.length; i++) {
let numberToCompare = array[i];
document.writeln("<br> I " + i + " " + array[i] + " <br>");

for (let j = 0; j < array.length; j++) {
document.writeln("J " + j + " " + array[j] + ", ");

if (array[j] < numberToCompare) {
numberToCompare = array[j];
document.write("<br> The comparison number is now " + numberToCompare + "<br>");
}
}
}

if (!newArray.includes(numberToCompare)) {
document.write("<br>" + numberToCompare + " gets pushed <br>");
newArray.push(numberToCompare);
// After I have pushed this, I want to remove it.
}
let removed = remove(array, numberToCompare);
if (removed >= 0 && removed <= i) {
i--;
document.writeln("Decrement I to " + i + "<br>");

}
// Push remaining element that's left over from loops
if (array.length) {
newArray.push(array[0]);
array.splice(0, 1);
}
}

sortNumbers(numbers, sortedNumbers);
console.log(numbers);
console.log(sortedNumbers);

sortedNumbers = [];
console.log(numbersTwo);
sortNumbers(numbersTwo, sortedNumbers);
console.log(numbersTwo);
console.log(sortedNumbers);

关于javascript - 我的 JavaScript 数字排序器的三个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51776317/

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