如何按另一个数组中的相应值对一个数组进行排序?

时间:2014-11-25 00:23:00

标签: javascript arrays sorting

我有两个数组。 第一个用于字符串,第二个是一个数组,用于显示其出现次数。

我正试图在第一个数组中获得前10个最常出现的单词。我对它进行了排序,但不知怎的,我只按字母顺序排序,第二个数组分别对应于它们的出现次数。

如何将第二个数组从最大值排序到最低值,同时对第二个数组中第二个数组进行排序< / em>的

我无法将我的json插入我的highcharts,我发现原因,数字应该放在方括号[]我尝试插入[] 1但仍然无效请看我的帖子我编辑它< / p>

这是我应该在高潮图中插入的数据

[{"name":"#murrayftw","data":[46]},
 {"name":"#job","data":[37]},
 {"name":"#jobs","data":[25]},
 {"name":"#favnashvine","data":[16]},
 {"name":"#rollersmusicawards","data":[14]},
 {"name":"#soa","data":[13]},
 {"name":"#tweetmyjobs","data":[12]},
 {"name":"#sman1boyolangu","data":[12]},
 {"name":"#supernatural200thepisode","data":[12]},
 {"name":"#veteransday","data":[12]}]

4 个答案:

答案 0 :(得分:2)

尝试在.sort()调用中使用自定义比较功能! Check out the documentation here.

我会,在这个例子中(可能不是最好的方式):

  1. 拥有未排序的“count”数组
  2. 有未分类的单词数组
  3. 对单词数组进行排序(使用下面描述的自定义函数)
  4. 对计数数组进行排序(无自定义函数)
  5. 自定义比较函数可能是一个简单的查找,并返回未排序的count数组中的相应值。 (即如果单词“a”是第0个索引且其相关计数量在count数组的第0个索引中,则返回count [0])

答案 1 :(得分:2)

如果您无法使用对象,请尝试使用嵌套for循环:

var array1 = ['z', 'd', 'e', 'f', 't'], arr1Count = array1.length;
var array2 = [1, 12, 5, 7, 3];
var sortedArray2 = array2.sort(function(x, y) {return y - x});

var i, j, sortedArray1 = [];

for (i = 0; i < arr1Count; i++) {
    for (j = 0; j < arr1Count; j++) {
        if (array2[j] === sortedArray2[i]) sortedArray1.push(array1[j]); //iterate through the unsorted numeric array (array2) and when it matches the sortedArray2, push this index of array1 into the sortedArray1
    }
}

答案 2 :(得分:1)

这将创建一个对象数组,然后按计数排序。

var hashtags = {},
    counts = [];

for (var i in data)
{
    if(data[i].lang == "en")
    {   
        for (var j in data[i].entities.hashtags)
        {
            var text = data[i].entities.hashtags[j].text;

            if(text) {
                if(hashtags[text]) {
                     hashtags[text].data[0]++;
                } else {
                     hashtags[text] = {
                         name: text,
                         data: [1]
                     };
                     counts.push(hashtags[text]);
                }
            }
        }
    }
}

counts.sort(function(a, b) { return b.data[0] - a.data[0]; });

答案 3 :(得分:1)

简单 - 不要使用2个数组,而是使用每个元素都是对象的一个​​集合

我从这篇文章中摘录了基础知识:Sorting JavaScript Object by property value

并完成了演示:

var collection = {car:300, bike:60, motorbike:200, airplane:1000, helicopter:400, rocket:8*60*60}
var sortable = [];
for (var item in collection)
      sortable.push([item, collection[item]])
sortable.sort(function(a, b) {return a[1] - b[1]})

collection = {};
for (var i in sortable)
{
    collection[sortable[i][0]] = sortable[i][1];
}

console.log(collection);