簡體   English   中英

如何在排序比較 function 中獲取數組元素的索引?

[英]How to get an index of an array element within a sort comparison function?

我正在看這個問題:

arrays 的sort方法可以接受一個參數,該參數是 function 與兩個參數(例如 x 和 y)的比較。 如果 x 應該在 y 之前,則 function 返回負 integer,如果 x 和 y 無法區分,則返回零,如果 x 應該在 x 之后,則返回正 integer。 編寫調用,使用箭頭函數,排序:

  1. 按降序排列的正整數數組
  2. 隨着年齡的增長,一群人
  3. 增加長度的字符串數組

這是我的代碼:

const posIntByDcrOrd = [5,4,3,2,1]
const peopleIncAge = [10,15,20,25,30]
const strIncLength = ['a','ab','abc','abcd']

const compFunc = (x,y) => {
    let sumNeg = y - x
    let sumPos = y + x
    if(indexOf(x) < indexOf(y)) { console.log(sumNeg) }
    else if( indexOf(x) > indexOf(y)) { console.log(sumPos) }
    else { return 0 }
}

posIntByDcrOrd.sort(compFunc(5,4))

這段代碼背后的想法是:如果你可以將 arrays 的 x 和 y 元素的索引相加,你可以得到一個負的 integer,因為 x 將低於 y 並且 y 將高於 x,這滿足條件。 但是當我嘗試運行它時,我當然得到了一個參考錯誤。 如何訪問已排序數組中 x 和 y 的索引位置? 我也對其他解決方案持開放態度。

PS:這些 arrays 是為了緩解思維過程而編造的。

這個網站上有大量關於排序的問答。 您的嘗試似乎表明您沒有看到 JavaScript 中的數字通常是如何排序的。 例如這個問答和許多其他的,提供了正確的方法來做到這一點。

對您的嘗試的一些評論:

  • sort的回調中沒有indexOf可供您使用。 你不需要這些信息。 只需從第一個值中減去第二個值即可獲得遞增(非遞減)結果。 在另一個意義上執行減法以獲得下降(非增加)的結果。 sort function 的內部將使用該返回值來執行排序算法。 在該過程中,您不需要知道任何索引。

  • 關於人員的分配可能沒有正確反映在您的示例數組中,因為現在它看起來與第一個輸入(數字數組)相同。 很可能是一組對象 例如:

     const peopleIncAge = [{name: "Helen", age: 20}, {name: "John", age: 15}, {name: "Anne", age: 30}, {name: "Clark", age: 25}, {name: "Joy", age: 10}]
  • 您的輸入 arrays 已經排序,因為它們需要是 output。 為了測試任何解決方案,最好將它們洗牌。

三個練習中的每一個都需要一個不同的回調 function 用於sort function:

 const positives = [1, 3, 5, 4, 2]; const people = [{name: "Helen", age: 20}, {name: "John", age: 15}, {name: "Anne", age: 30}, {name: "Clark", age: 25}, {name: "Joy", age: 10}]; const strings = ['abc', 'a', 'abcd', 'ab']; console.log(positives.sort((x, y) => y - x)); // decreasing console.log(people.sort((x, y) => x.age - y.age)); // increasing age console.log(strings.sort((x, y) => x.length - y.length)); // increasing length

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM