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排序和重新映射数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45801450/

相关文章:

javascript - Angular Material sidenav 指令在 app.component 中不起作用

javascript - 为什么 PNotify 选项 `after_open` 不起作用?

javascript - 从 html 文件执行 Nodejs 脚本

javascript - jQuery:访问动态创建的表中类的单个实例

jquery - 法尔康 PHP : Jquery Datatable Server Side individual column filtering only gives first pages selection options

javascript - 从 php 数组自动完成

c - 在 C 中交换指针数组中的 2 个元素(到不同长度的字符串)

javascript - 如果类似的工作已经完成,则推迟 Node.js HTTP 请求

jquery - 如何使用自定义 div 元素在 Jquery 中显示工具提示

c - C-从文件读取并使用多维数组