[英]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 通過引用工作,這意味着每個值(除了數字等基元)實際上都是引用。 因此, r
和a
指向內存中完全相同的數組。 可以這么說,修改一個也會“修改另一個”。
您可以通過執行以下操作之一來克隆陣列:
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.