簡體   English   中英

Javascript排序索引鏈接數組

[英]Javascript sort index linked array

很抱歉,如果已經有人問我但我確實搜索了“javascript sort index linked array”並且沒有發現任何令人滿意的結果。

我有一個名字數組,另一個索引鏈接數組,記錄名稱出現在一個段落中的頻率,我想按字母順序排序兩個數組,但根據名稱頻率 - 比如,最頻繁到最不頻繁。 我有足夠的代碼可以完成這項工作,但我認為它看起來像是一個黑客。 當然,有一個更高雅的方式來解決必須是一個非常常見的排序問題。

我從一系列名字開始[]說,6個約翰,2個安尼斯,9個湯姆斯,12個安德魯斯,3個克里斯滕斯,1個阿奇和14個彼得斯 - 已按字母順序排序並計入頻率,下面的例程導致一系列名稱名稱和頻率數組的索引,允許我按從高到低的順序顯示名稱和頻率。

var names = ["Andrew", "Anne", "Archie", "John", "Kristen", "Peter", "Tom"];
var frequency = [12, 2, 1, 6, 3, 14, 9];
var holder = [], secondpart = [], numindex = [];
var i;
for (i = 0; i < frequency.length; i++) {
    if (frequency[i] < 10) {
        holder[i] = "0" + frequency[i] + "!" + i;    // add leading zeros as required
    }
    if (frequency[i] > 9) {
        holder[i] = frequency[i] + "!" + i;    // no leading zeros required
    }
}
holder.sort();
holder.reverse();
for (i = 0; i < holder.length; i++) {
    secondpart[i] = holder[i].substring(holder[i].indexOf("!") + 1, holder[i].length);
    numindex[i] = parseInt(secondpart[i]);
}

我現在可以根據名稱頻率列出兩個數組。

var txt = "";
var useindex;
for (i = 0; i < numindex.length; i++) {
    useindex = numindex[i];
    txt = txt + names[useindex] + " - " + frequency[useindex] + "<br>";
}

有沒有其他人有這個問題,你是如何解決它的。

嘗試這個:

var names = ["Adam", "Peter", "Mahu", "Lala"];
var frequencies = [6,2,9,1];

var tupples=[];
for(let i = 0; i<names.length; i++)
{
    tupples[i] = {
       frequency : frequencies[i],
       name : names[i]
    };
}

//ascending
//tupples.sort(function(a,b){return a.frequency-b.frequency;});

//descending
tupples.sort(function(a,b){return b.frequency-a.frequency;});

for(let i=0; i<tupples.length; i++)
{
    console.debug(tupples[i].name, tupples[i].frequency);
}

基本上你可以使用索引並通過獲取給定索引的頻率對它們進行排序。

 var names = ['Andrew', 'Anne', 'Archie', 'John', 'Kristen', 'Peter', 'Tom'], frequency = [12, 2, 1, 6, 3, 14, 9], indices = names.map(function(_, i) { return i; }); indices.sort(function(a, b) { return frequency[b] - frequency[a]; }); document.write('<pre>' + JSON.stringify(indices, 0, 4) + '</pre>'); document.write(indices.map(function(a) { return names[a]; }).join('<br>')); 

暫無
暫無

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

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