JS是如何读取if语句和遍历数组元素的



下面的代码是一个函数,它将循环遍历数组并检查整数数组是否已排序,如果已排序则返回true,否则返回false。我的一个朋友帮了我,但我忘了他的解释是什么。对于if语句,我很难理解它在说什么。如果数组的每个索引(array[i])都大于数组的每个索引加1 (array[i+1]),那么变量tell为假。例如,如果数组[31,4,99,23,8]大于[31+ 1,4 + 1,99 + 1,23 + 1,8 +1]返回false?混淆主要来自于"array[i+1]"到底是什么。提前谢谢你。

function isSorted(arr) {
    var tell = true;
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] > arr[i + 1]) {
            tell = false;
        }
    }
    return tell
}

arr[i]是迭代中数组的当前元素。arr[i + 1]是下一个元素

您的if语句所说的是"如果当前元素大于下一个元素,则将tell设置为false"(因为这意味着数组未排序)。

在这段代码中有一个off-by- 1的错误,因为它查看数组末尾以外的元素。正确的实现应该是:

function isSorted(arr) {
    var tell = true;
    for (var i = 0; i < arr.length - 1; i++) { // <-- loop up to the second-to-last element
        if (arr[i] > arr[i + 1]) {
            tell = false;
        }
    }
    return tell
}

arr[x]表示数组中位置为'x'的对象

如果你的数组是[z, x, d, r],那么位置0的对象是"z",位置1的对象是"x",位置2的对象是"d",位置3的对象是"r"。所以arr[0]是"z",arr[2]是"d",等等。

您的代码正在检查位置i的任何对象是否大于数组中的下一个对象(即位置i+1的对象)

上面写着:

  1. 设置tell标志为true,因此除非我们找到数组未排序的原因,否则我们将返回true作为答案。
  2. 现在,对于每个元素arr[i]和它的下一个元素arr[i+1],做以下检查:如果第一个大于下一个,这意味着我们有类似[..., 3, 2,...]的情况,所以我们知道数组没有排序。为了表示这一点,我们将tell标志设置为false

+1不是Value +1,而是下一个元素。所以在第一个循环中i是0。然后if检查,如果位置0处元素的值大于元素1的值(0 + 1),则返回false

arr[i]是索引为i的元素。arr[i + 1]是索引为i + 1的元素。它是下一个元素

if检查当前元素是否大于下一个元素。如果每个元素都比下一个元素大,那么这意味着数组是按降序排序的。如果你的数组是[8, 6, 5, 1],那么8 > 6 > 5 > 1。如果你的数组是[8, 9, 5, 1],那么它不会被排序,因为8 < 9 > 5 > 1 .

最新更新