我想按每个内部数组的第二个数字对数组进行排序。
原始数组: [[1,7],[2,5],[3,4],[4,10]]
排序后所需的数组: [[3,4],[2,5],[1,7],[4,10]]
通过错误“无法读取未定义的属性'1'”对数组进行一次排序后。
我知道这是因为arr [i + 1] [1]是未定义的,因为arr [i] [1]是循环末尾数组中的最后一个元素,因此arr [i + 1] [1]不存在。
我尝试了所有可以想到的条件语句来捕获arr [i + 1] [1](当它变得未定义但没有成功时)。
我应该如何阻止它捕获未定义的错误,而是继续遍历数组直到其完全排序?
let unsortedArr = [[1, 7], [2, 5], [3, 4], [4, 10]]
let sorted = false;
function sort(arr){
while (!sorted) {
sorted = true;
for (let i = 0; i < arr.length; i++) {
if (arr[i][1] > arr[i + 1][1]) {
sorted = false;
let temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
console.log(arr)
}
sort(unsortedArr)
答案 0 :(得分:0)
问题出在你的
if (arr[i][1] > arr[i + 1][1]) {
// ^^^
,它将在i
到达length - 1
时抛出。最多只迭代length - 2
:
let unsortedArr = [
[1, 7],
[2, 5],
[3, 4],
[4, 10]
]
let sorted = false;
function sort(arr) {
while (!sorted) {
sorted = true;
for (let i = 0; i < arr.length - 1; i++) {
if (arr[i][1] > arr[i + 1][1]) {
sorted = false;
let temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
console.log(arr)
}
sort(unsortedArr)