2017-10-07 110 views
2

我想通過單擊計數對imgUrl數組進行排序。我有兩個數組。什麼是numpy argsort的JavaScript等價物?

clickCount = [5,2,4,3,1] 
imgUrl  = ['1.jpg','2.jpg','3.jpg','4.jpg','5.jpg'] 

在numpy中很容易。我用order = np.argsort(clickCount)然後我創建另一個陣列newArray = [imgUrl[i] for i in order]

如何在javascript(最好是vanilla)中實現相同的效果?

回答

6

您可以在python中使用Schwartzian transform也稱爲Decorate-Sort-Undecorate(DSU)。

DSU:

  1. 裝飾 - 使用Array#Map,豐富每個項目的陣列,使所需的排序數據
  2. 排序 - 利用增加的數據
  3. Undocrate - 使用提取排序的數據陣列#再次映射

演示:

const clickCount = [5,2,4,3,1]; 
 
const imgUrl = ['1.jpg','2.jpg','3.jpg','4.jpg','5.jpg']; 
 

 
const result = imgUrl 
 
    .map((item, index) => [clickCount[index], item]) // add the clickCount to sort by 
 
    .sort(([count1], [count2]) => count2 - count1) // sort by the clickCount data 
 
    .map(([, item]) => item); // extract the sorted items 
 
    
 
console.log(result);

+0

我讀了維基百科的頁面,但您可以加入一個摘要的快速日後參考。 –

+0

@SouradeepNanda - 已添加。 –

相關問題