繁体   English   中英

有人可以向我解释什么是错的吗? - 按高度排序

[英]Can someone explain to me what's wrong? - sort by height

我不知道为什么代码有时会跳过一些数字。 对于情况4: a: [4, 2, 9, 11, 2, 16] [2, 4, 2, 9, 11, 16]当预期输出为[2, 2, 4, 9, 11, 16][2, 4, 2, 9, 11, 16]我的输出为[2, 4, 2, 9, 11, 16] [2, 2, 4, 9, 11, 16]

我没有修改索引数组,所以它应该检查每个数字位置。 另外,我不确定第 7 行是如何完全工作的,在位置 j 中添加了元素 i 的消除? 如果是这样,为什么后面有一个 [0]?

我觉得这段代码有点乱,但我需要从中学习。

function sortByHeight(a) {
    r = a
    for(i = 0; i < a.length; i++) {
        if (a[i]!= -1) {
            for(j = 0; j < a.length; j++) {
                if (a[j] != -1 && a[i] - a[j] < 0) {
                    r.splice(j,0,r.splice(i,1)[0])
                }
            }
        }
    }
    return r
}

你的错误可能是认为r = a复制了数组。 在 JavaScript 中并非如此。 JavaScript 通过引用工作,这意味着每个值(除了数字等基元)实际上都是引用。 因此, ra指向内存中完全相同的数组。 可以这么说,修改一个也会“修改另一个”。

您可以通过执行以下操作之一来克隆阵列:

r = [ ...a ];
r = a.slice();
r = Array.from(a);

你的错误在这一行(a[j] - a[i] < 0) ,你检查它(a[i] - a[j] < 0) ,以相反的顺序检查会给你减少的数组顺序,您可以在返回之前反转数组将以递增顺序为您提供

function sortByHeight(a) {
r = a
for(i = 0; i < a.length; i++) {
    if (a[i]!= -1) {
        for(j = 0; j < a.length; j++) {
            if (a[j] != -1 && (a[j] - a[i] < 0)) {
                r.splice(j,0,r.splice(i,1)[0])
            }
        }
    }
}
r.reverse()
return r
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM