Javascript排序索引链接数组



如果已经有人问我这个问题,我很抱歉,但我搜索了"javascript排序索引链接数组",没有找到任何令人满意的结果。

我有一个名称数组,还有另一个索引链接数组,它记录了名称在文章中出现的频率,我想不按字母顺序,而是根据名称频率对这两个数组进行排序,比如说,从最频繁到最不频繁。我有下面的代码,它可以很好地完成这项工作,但我认为它看起来像是一个黑客。当然,有一种更礼貌的方法可以解决一个非常常见的排序问题。

我从一组名字开始,比如6个Johns、2个Annes、9个Toms、12个Andrews、3个Kristens、1个Archie和14个Peters——已经按字母顺序排序并按频率计数,下面的例程会生成一组名称和频率数组的索引,使我能够按从高到低的顺序显示名称和频率。

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>'));

最新更新