按频率对 Javascript 数组进行排序,然后过滤重复项

2024-01-08

获取 javascript 数组,按值的频率排序,然后过滤唯一值的优雅方法是什么?

So,

["apples", "oranges", "oranges", "oranges", "bananas", "bananas", "oranges"]

becomes

["oranges, "bananas", "apples"]


首先计算每个项目的频率。

{
    apples: 1,
    oranges: 4,
    bananas: 2
}

然后从此频率对象创建一个数组,该数组也将删除重复项。

["apples", "oranges", "bananas"]

现在使用我们之前创建的频率图按降序排列该数组。

function compareFrequency(a, b) {
    return frequency[b] - frequency[a];
}

array.sort(compareFrequency);

这是完整的源代码(使用新引入的数组函数 https://developer.mozilla.org/en/new_in_javascript_1.6#Array_extras在 ECMA 5 中)并结合重复数据删除和频率图生成步骤,

function sortByFrequency(array) {
    var frequency = {};

    array.forEach(function(value) { frequency[value] = 0; });

    var uniques = array.filter(function(value) {
        return ++frequency[value] == 1;
    });

    return uniques.sort(function(a, b) {
        return frequency[b] - frequency[a];
    });
}

与上面使用常规数组迭代相同。

function sortByFrequencyAndRemoveDuplicates(array) {
    var frequency = {}, value;

    // compute frequencies of each value
    for(var i = 0; i < array.length; i++) {
        value = array[i];
        if(value in frequency) {
            frequency[value]++;
        }
        else {
            frequency[value] = 1;
        }
    }

    // make array from the frequency object to de-duplicate
    var uniques = [];
    for(value in frequency) {
        uniques.push(value);
    }

    // sort the uniques array in descending order by frequency
    function compareFrequency(a, b) {
        return frequency[b] - frequency[a];
    }

    return uniques.sort(compareFrequency);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按频率对 Javascript 数组进行排序,然后过滤重复项 的相关文章

随机推荐

  • 在 Marklogic Javascript 中实现 For 循环?

    我可以使用下面的 XQuery 获取集合中文档的所有 URI for doc in fn collection transform return xdmp node uri doc 但是 当我尝试在 MarkLogic 的 Javascri
  • pytest:在报告中添加长测试描述的最佳方法

    默认情况下 pytest 在 pytest 报告中使用测试函数名称或测试文件名称 有没有在报告中添加测试描述 长测试名称 的最佳方法 而无需使用 pytest 重命名文件或函数 我们可以通过在运行时更新测试用例名称来做到这一点吗 请求 节点
  • 插入 MySQL 表或更新(如果存在)

    我想向数据库表添加一行 但如果存在具有相同唯一键的行 我想更新该行 例如 INSERT INTO table name ID NAME AGE VALUES 1 A 19 假设唯一的密钥是ID 并在我的Database 有一行ID 1 在这
  • 在 Bash 中,如何在字符串中插入 $(...) ?

    我正在尝试编写一个 Bash 脚本 在我的实时站点的数据库上执行 mysqldump 然后将转储添加并提交到 Git 存储库 这是我到目前为止所拥有的 存储在 sh 文件中 该文件由crontab https en wikipedia or
  • Xamarin 链接 SDK 和 UserAssemblies:膨胀类 android.support.v7.widget.FitWindowsFrameLayout 时出错

    我的应用程序无需链接即可运行 当我仅选择 Sdk Assemblies 时 它也可以正常工作 它在调试模式下也能正常工作 但如果我选择链接 SDk 和 UserAssemblies 它就会开始失败 我检查了日志 只找到了下面的内容 我到处谷
  • 如何在 perl 中使用 Qt GUI(使用 Qt Designer 创建)?

    我已经在 Qt Designer 中创建了 Qt GUI 并将其编译 使用 puic4 到 gui pm 现在 我想在我的 Perl 应用程序中使用它 但我陷入困境 因为我不知道如何创建窗口对象 我在 start pl 中有以下代码 use
  • `—` 或 `—` HTML 输出有什么区别吗?

    mdash or 8212 这些有区别吗 其中一个比另一个得到更好的支持吗 SGML 解析器 或 XHTML 情况下的 XML 解析器 可以处理 8212 无需处理 DTD 这对浏览器来说并不重要 因为它们只是吸食标签汤 同时 mdash
  • 多选,Jquery:检查我的多选是否至少应选择一个选项

    您好 我将总结我的问题 希望您能理解 主要目标 在点击选择按钮之前检查是否至少选择了一个选项 否则 如果在没有选择至少一个选项的情况下单击选择按钮 则会显示一条消息 请选择至少一个选项 Purpose 我的其他代码中有一些原因需要一个选择按
  • 在用户定义函数中使用 step() 时丢失对象错误

    5天了还是没有回复 从西蒙的评论中可以看出 这是一个可重现且非常奇怪的问题 似乎只有当具有非常高预测能力的逐步回归被包装在函数中时才会出现这个问题 我已经为此苦苦挣扎了一段时间 任何帮助将不胜感激 我正在尝试编写一个运行多个逐步回归并将其全
  • Django 分页,包含下一个、上一个、计数

    我正在尝试进行分页并阅读此链接 使用 API View 在 Django Rest Framework 中分页 https stackoverflow com questions 29071312 pagination in django
  • Firebug 控制台中的对象

    这是我发布的问题的扩展here https stackoverflow com questions 11750145 javascript trouble using for in to iterate through an object
  • 如何获取正在运行的占用 100% cpu 的 java 程序的完整堆栈跟踪?

    我确实有一个詹金斯实例 它陷入某种无限循环中 没有任何可见的活动 我可以得到pid那么如何生成可用于错误报告的跟踪呢 我在linux上运行 尝试用jstack http download oracle com javase 1 5 0 do
  • 从 Illuminate\Html 切换到 Collective\Html,未找到类“Illuminate\Html\HtmlServiceProvider”

    我更新了composer json删除照亮 html并添加 require laravelcollective html 5 1 我从中删除了提供者 别名app php对于 Illuminate Html 并添加了替换项 Collectiv
  • 如何通过 moment.js 获取最近的日期?

    日期列表 const datesToBeChecked 2020 07 06 2020 07 13 2020 07 20 检查日期 const dateToCheckFor 2020 07 07 如何使用 moment js 获取日期数组中
  • PHP 字符串转整数异常

    我在 HackerRank 上遇到一个问题 第 16 天 异常 字符串到整数 https www hackerrank com challenges 30 exceptions string to integer 简而言之任务是 读取一个字
  • Laravel 将 http 添加到 url

    Laravel 5 0 中是否有一个助手可以自动将 http 添加到没有它的 url 中 这与 codeigniter 类似prep url可以找到的here https ellislab com codeigniter user guid
  • 如何在 JavaScript 中动态创建 HTML 页面

    是否可以用 JavaScript 动态创建完整的 HTML 页面 基本上 我正在创建一个 HTML 编辑器在浏览器中我想要做的是将 HTML 代码放在屏幕顶部的文本区域中 并在屏幕底部的 HTML 页面预览中 问题是它不仅仅是小的 HTML
  • C# JSON 自定义序列化

    有没有一种方法 库允许我自定义类似于 GSON 自定义序列化器的 JSON 序列化 这是我想要得到的 这个对象 KeyValuePair 年龄 10 myAge 通常会被序列化为 我的年龄 关键 年龄 价值 10 虽然我希望它像这样序列化
  • 矢量与圆锥的交点

    我有一个向量A定义为 Ao t Ad 我还有一个带有顶点的圆锥体 圆锥尖 V 轴方向D 基半径R和身高H 如何找到向量和圆锥之间的交点 我正在使用 glm 进行数学计算 Here s a simple illustration 我没有处理光
  • 按频率对 Javascript 数组进行排序,然后过滤重复项

    获取 javascript 数组 按值的频率排序 然后过滤唯一值的优雅方法是什么 So apples oranges oranges oranges bananas bananas oranges becomes oranges banan