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

4
我有两个数组。第一个是字符串的数组,第二个是它们出现次数的数组。
我想要获取前十个在第一个数组中出现最多的单词。我已经将其排序,但是我只按字母表顺序排序,第二个数组分别对应它们的出现次数。
如何将第二个数组从最大到最小进行排序,同时按照第二个数组的顺序匹配排序第一个数组?
我无法将我的json插入到highcharts中,我找到了原因,数字应该放在方括号[]中,我已经尝试在1中插入[],但仍然不起作用,请查看我的帖子我已经编辑过了。
这是我应该插入高图表中的数据。
[{"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]}]

1
你有可用的样本数据集吗? - Nick Tomlin
不要使用两个无关的数组,而是使用一个对象来保存单词的引用和计数 [{'word' : 'hello', 'count' : 2}, {'word' : 'world', 'count' : 1}],并根据单词计数对该数组进行排序。 - David Thomas
那接下来我打算做的就是使用一个对象。如果我把它放在一个对象中然后对数组进行排序,它也会对单词进行排序吗? - user4143467
4个回答

1
如果您无法使用对象,请尝试使用嵌套的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
    }
}

1
尝试在.sort()调用中使用自定义比较函数!在此处查看文档。 在这个例子中,我可能会:
1. 有未排序的“count”数组 2. 有未排序的单词数组 3. 对单词数组进行排序(使用下面描述的自定义函数) 4. 对计数数组进行排序(没有自定义函数)
自定义比较函数可能是一个简单的查找,并返回未排序计数数组中对应的值。(例如,如果单词“a”是第0个索引,其相关计数数量在计数数组的第0个索引中,则返回count[0])

0

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

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]; });

非常感谢您的回答,它对我很有帮助。但我想再问一次,我得到了这个对象 {"FrozenOnIce":{"text":"FrozenOnIce","count":1},"bestbdaygift":{"text":"bestbdaygift","count":1}},我只想得到 {"text":"FrozenOnIce","count":1},{"text":"bestbdaygift","count":1}},我该怎么做? - user4143467
“hashtags”对象仅用作查找表,以便更轻松地查找已经看到的单词。您需要使用“counts”数组。它以您想要的格式包含了您想要的内容。 - rdubya
谢谢您!顺便说一下,我在将我的 JSON 插入到我的 Highcharts 中遇到了问题,我找出了原因,数字应该放在方括号 [] 中。我已经尝试将方括号 [] 插入到 1 中,但仍然无法工作,请看一下我的帖子,我已经编辑过了。 - user4143467
我已经更新了我的答案,以返回您所需的内容。您想创建什么样的图表? - rdubya
这是一个投票图表,非常感谢您回答我的问题!我在那个问题上有些困惑,非常感激您的回复,再次感谢:D - user4143467

0
简单 - 不要使用2个数组,而是使用一个集合,其中每个元素都是一个对象。
我从这篇帖子上了解到了基础知识:按属性值对JavaScript对象进行排序
然后完成了演示。
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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接