簡體   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