簡體   English   中英

如何根據另一個數組的排序方式對一個數組進行排序? (JavaScript)的

[英]How to sort one array based on how another gets sorted? (Javascript)

我必須創建一個函數來根據每個數字的“權重”對一串數字進行排序 - “權重”是加在一起的數字的數字(99的權重為18,權重為100將是1等等)。 這意味着字符串"100 54 32 62"將返回"100 32 62 54"

我可以使用以下方法獲得這些數字的權重數組:

function orderWeight(str) {
    var arr = str.split(" ");
    var sortArr = [];
    arr.forEach(t => sortArr.push(t.split("").map(s => parseInt(s, 10)).reduce(add, 0)));
}

其中add只是一個通用的附加功能。 對於上面的例子, sortArr將是[1, 9, 5, 8] sortArr [1, 9, 5, 8]

根據數字權重sortArr的新數組如何排序,從字符串arr中對原始數字數組進行排序的最佳方法是什么?

謝謝!

這應該做的伎倆:

var x = '100 54 32 62';

function orderWeight(str) {
  return str.split(' ').sort(function(a, b) {
    return (a.split('').reduce(function(p, c) { return +p + +c; })) > (b.split('').reduce(function(p, c) { return +p + +c; }));
  }).join(' ');
}

var result = orderWeight(x);

輸出:

100 32 62 54

更新:

根據Sterling的建議,這里是用lambda格式編寫的相同函數。

var x = '100 54 32 62';

function orderWeight(str) {
  return str.split(' ').sort((a, b) => a.split('').reduce((p, c) => +p + +c) > b.split('').reduce((p, c) => +p + +c)).join(' ');
}

var result = orderWeight(x);

注意:這是我第一次使用lambda語法編寫Javascript。 感謝Sterling的建議。

使用地圖排序的解決方案。

 function sort(string) { var array = string.split(' '), mapped = array.map(function (a, i) { return { index: i, value: +a.split('').reduce(function (a, b) { return +a + +b; }) }; }); return mapped.sort(function (a, b) { return a.value - b.value; }).map(function (a) { return array[a.index]; }).join(' '); } document.write('<pre>' + JSON.stringify(sort('100 54 32 62'), 0, 4) + '</pre>'); 

我將有一個索引數組(0..n-1)並根據權重數組對其進行排序(通過傳遞一個比較函數來比較給定索引值的權重)。 然后你將有一個索引數組,顯示每個項目應該在哪里(在你的例子中,索引數組將是[0,2,3,1],這意味着arr [0]應該是第一個,然后是arr [2]現在你可以使用索引數組構建排序數組,例如[arr [0],arr [2],arr [3],arr [1]]。所以回顧一下:獲取輸入數組,計算權重數組,創建索引數組0..n-1,根據權重數組對其進行排序,最后根據排序的索引數組構造輸出數組。

暫無
暫無

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

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