javascript - javascript排序和重新映射数组

原文 标签 javascript jquery arrays sorting

我正在使用以下代码(由JQuery Javascript Sort Array by Highest Count提供)对从最高计数到最低计数的字符串列表进行排序:

var items = {}, sortableItems = [], i, len, element, listOfStrings; 

    listOfStrings = JSON.parse(the_chems);


for (i = 0, len = listOfStrings.length; i < len; i += 1) 
    {
        if (items.hasOwnProperty(listOfStrings[i])) {
            items[listOfStrings[i]] += 1;
        } else {
            items[listOfStrings[i]] = 1;
        }
    }

for (element in items) 
    {
        if (items.hasOwnProperty(element)) {
            sortableItems.push([element, items[element]]);
        }
    }

sortableItems.sort(function (first, second) 
    {
        return second[1] - first[1];
    });


代替这种类型的数组输入

["red", "red", "red", "blue", "blue"]


哪个返回

[ [ "red", 3 ], [ "blue", 2 ] ]


我想使用像

[["red","apple"], ["red","chilli"], ["red","melon"], ["blue","ocean"], ["blue","eyes"]]


并返回

[["red", 3, ["apple","chilli","melon"]], ["blue", 2, ["blue","ocean"]]

最佳答案

您可以使用哈希表并将结果收集到数组中。



var array = [["red", "apple"], ["red", "chilli"], ["red", "melon"], ["blue", "ocean"], ["blue", "eyes"]],
    hash = Object.create(null),
    result = [];

array.forEach(function (a) {
    if (!hash[a[0]]) {
        hash[a[0]] = [a[0], 0, []];
        result.push(hash[a[0]]);
    }
    hash[a[0]][1]++;
    hash[a[0]][2].push(a[1]);
});

console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - javascript排序和重新映射数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45801450/

相关文章:

javascript - 为与CSS3动画完成相关的功能添加后备功能

javascript - 为什么 Meteor 有一个奇怪的事件处理程序语法?

javascript - 这段代码在Facebook JS中的意义何在?

arrays - 正则表达式匹配给定数据中的最后一个值

java - 创建一个简单的StringRevert程序-Java

javascript - 在Jest测试文件中模拟文档

jquery - 如何触发我的jQuery事件?

javascript - 根据表td输入更改标签?

javascript - 如何处理页面中多个 slider 的 slider 更改事件:JqueryMobile

arrays - 了解 J 数组