如何根据键名合并2个数组并根据合并后的值进行排序?

2023-12-20

假设我有两个列表

const listA = [{"apple":100}, {"banana": 50}, {"pearl": 10}, {"cherry": 5}, {"kiwi": 3}]
const listB = [{"peach": 30}, {"apple": 15}, {"kiwi": 10}, {"mango": 5}]

问题是如何将两个列表合并为一个堆栈,将相同的项目以数字增量并按数量排序?我的意思是最终结果应该是 ->

const listMerged = [{"apple":115}, {"banana": 50} , {"peach": 30}, {"kiwi": 13}, {"pearl": 10}, {"cherry": 5}, {"mango": 5}]

我知道它会是这样的:

sortListDesc(list) {

    return obj.sort(function (l1,l2) {
      return l2< l1 ? -1
           : l2 >l1 ? 1
           : 0
    })
  }

但不知道具体如何堆叠数字,而不是按数量排序。


您可以使用reduce https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce, and sort https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort and Object.values https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values像这样:

const listA = [{"apple":100}, {"banana": 50}, {"pearl": 10}, {"cherry": 5}, {"kiwi": 3}]
, listB = [{"peach": 30}, {"apple": 15}, {"kiwi": 10}, {"mango": 5}]

let merged = Object.values(listA.concat(listB).reduce((acc, a) => {
  const [k, v] = Object.entries(a)[0];
  (acc[k] = acc[k] || {[k]: 0})[k] += v;
  return acc;
}, {}));

merged.sort((a, b) => Object.values(b)[0] - Object.values(a)[0]);
console.log(merged);

Or,

Using reduce,创建一个对象,以所有水果为键,以单个总和为值。然后使用Object.entries https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries, sort and map像这样:

const listA = [{"apple":100}, {"banana": 50}, {"pearl": 10}, {"cherry": 5}, {"kiwi": 3}]
, listB = [{"peach": 30}, {"apple": 15}, {"kiwi": 10}, {"mango": 5}]

let merged2 = listA.concat(listB).reduce((acc, a) => {
  const [k, v] = Object.entries(a)[0];
  acc[k] = (acc[k] || 0) + v;
  return acc;
}, {});

const final = Object.entries(merged2)
  .sort(([, v1], [, v2]) => v2 - v1)
  .map(([k, v]) => ({[k]: v}))

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

如何根据键名合并2个数组并根据合并后的值进行排序? 的相关文章

  • 对 JavaScript 中的 while 循环感到困惑

    我可能在这里有点厚重 但请回答我这个问题 考虑以下代码 a 1 while a lt 6 console log a a 如果我运行这个 我会在控制台中得到从 1 到 6 的值 然后是另一个 6 现在看看这个 a 1 while a lt
  • angular.copy() 和 JSON.parse(JSON.stringify()) 之间的区别?

    有人可以解释 angular copy 和 JSON parse JSON stringify 之间的区别吗 有吗 您会推荐使用什么 angular fromJson angular toJson 与 JSON parse JSON str
  • JavaScript 中的常用数字

    在我的任务中 我必须编写一个程序来查找数组中最常见的数字以及它重复的次数 我写了一些东西 但只打印最大重复次数 所以我的问题是如何打印这个元素的值 最大数量 在我的例子中是 4 var array 13 4 1 1 4 2 3 4 4 1
  • 是否可以用 json 进行表达式/计算?

    我使用出色的 json server 作为应用程序的后端 它对于访问自定义端点以检索一些数据非常有用 但是如果它允许我进行计算 表达式以便我也可以模仿后端行为 那将会非常有用 以这个数据结构为例 products name football
  • Angular 2 最终版本路由器单元测试

    如何使用 karma 和 jasmine 对 Angular 2 0 0 版中的路由器进行单元测试 这是我的旧单元测试在版本 2 0 0 beta 14 中的样子 import it inject injectAsync beforeEac
  • 向 FTP 服务器执行跨域 XMLHTTPREQUEST 的语法是什么?

    我有一个 webDav CORS 插件 可以使用它在 webDav 服务器上 POST PUT GET REMOVE ALLDOCS 文件 我现在想对 FTP 做同样的事情 但我正在努力获取xmlhttprequest 工作语法 我只是收到
  • 在 NPM 上捆绑并发布客户端 Web 代码

    我制作了一个 JavaScript 文件 假设它的内容是这样的 let myCoolAlert str gt alert str in a different js file SO doesn t allow you to cross fi
  • 将服务连接到现有的流星帐户

    我正在设置一个流星应用程序 其中涉及使用用户名和密码进行注册 然后希望将该帐户与 Facebook 和 Twitter 连接起来 我只需使用帐户包即可轻松启动并运行第一部分 但是当我有一个登录用户调用 Meteor loginWithFac
  • 在 Chrome 中检索浏览器语言

    我一直在尝试让 momentjs 正确检测浏览器语言并本地化时间显示 按照使用 Moment js 进行区域设置检测 https stackoverflow com questions 25725882 locale detection w
  • Node.js 和 Express:异步操作后如何返回响应

    我是 Node js 新手 所以我仍然对异步函数和回调很感兴趣 我现在的难题是如何在异步操作中从文件读取数据后返回响应 我的理解是发送回复的工作方式如下 这对我有用 app get search function req res res s
  • JavaScript - 这个这个

    String prototype foo String prototype foo bar function How can you reference the grandparent string console log this par
  • Phonegap 图像未显示

    我无法让图像在我的phonegap 版本中正常工作 我读过绝对路径可能不起作用 所以我尝试了绝对路径和相对路径 但仍然没有运气 我包括这样的图像
  • 单击窗口后才检测到 keydown

    在我的 Web 应用程序中 我有一个用于打开菜单的键的事件侦听器 仅当我单击页面上的任意位置后 此功能才可以正常工作 我尝试将焦点添加到窗口加载 但这仍然不会让 keydown 函数运行 直到我单击页面上的某个位置之后 有谁知道这是否可能
  • 用于客户端存储和服务器端同步的javascript库[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 javascript 库 它可以让我将数据存储在客户端数据库中 并在后台自动将数据库同
  • CKEditor TypeError:c[a] 在 CodeIgniter 中未定义

    我正在尝试在基于 codeigniter 的网站中安装 CKEditor 并且我已按照本教程进行操作 Codeigniter 教程中的 CKEditor http nukium com developpement php framework
  • 当react-redux中redux存储的非相关部分更新时组件重新渲染

    我注意到我的一些组件在我不期望的情况下重新渲染 可以说我有一个
  • 如何修复 AJAX 在选中复选框时始终触发?

    有时这个 AJAX 会触发 有时不会 让我解释一下 habit js document ready function habit check change function habit this parent siblings habit
  • 如何在 Javascript 中将字符串数组转换为特定的树结构

    我从后端获取文件路径列表 它代表文件夹结构 如下所示 paths path to file1 doc path to file2 doc foo bar doc 路径的长度是任意的 为了使用文件树组件 角度2树组件 https github
  • 禁用 Materialise Carousel 上的触摸

    看起来以前没有人问过这个问题 因为我几乎在互联网上寻找一个非常简单的答案 如何禁用在物化轮播上向左 向右滑动的功能 在 Materialize js 添加 编辑 var allowCarouselDrag true value functi
  • 如何在odoo中重写js函数

    我想加载 shop checkout url 函数是 odoo define change info order website sale change info order function require use strict oe w

随机推荐

  • 允许在加入节点执行多个事件操作

    是否允许在一个连接节点使用多个事件 如下所示 或者是可以用来描述活动流程的虚构令牌 只是在第二个事件出现之前的某一时刻出现并消失了 是否允许在一个连接节点使用多个事件 Yes a JoinNode is a 控制节点同步多个流 是虚构的标记
  • Python。 while 循环中的变量未更新。

    我对编程非常陌生 我在编写一个基本的猜谜游戏时遇到了问题 x是计算机生成的随机数 该程序应该比较 previous guess x 的绝对值和新猜测减去 x 并告诉用户他们的新猜测是否更近或更远 但变量 previous guess 并未使
  • 随机数生成器,如何获得不相同的随机数

    我正在制作一个随机数生成器 但我不想再次生成这些数字 例如 1 2 3 4 是完美的 1 1 2 4 不是我想要的 因为数字重复出现 我看过这里 没有人能回答我正在寻找的问题 按照我的逻辑 这应该可行 但我不知道我做错了什么 我是 pyth
  • 如何在 Excel 工作表内的表对象中插入行?

    我在尝试将行插入现有表对象时遇到困难 这是我的代码片段 string connectionString Provider Microsoft ACE OLEDB 12 0 Data Source C myExcelFile xlsx Ext
  • Jmeter HTTPS代理配置

    我正在尝试使用 jmeter 加载测试 https 网站 我已经使用 jmeter bin 中 proxyserver jks 文件中的 keytool 安装了客户端证书 pfx 我还使用jmeter手册配置了jmeter代理和firefo
  • 如何将 Bamboo 变量从 Bamboo 脚本发送到 docker 容器?

    我正在为bamboo 使用 Docker 插件 我需要在 docker 容器中执行一个脚本 sh 脚本包含 echo ini source path bamboo ini source path 如果我将此行直接放入容器命令中 则 bamb
  • 删除或重置 Cookie

    我正在设置一个cookieRequest Cookies TemplateName value在我的申请的其中一页 第 3 页 上 现在我可以从第 3 页导航到第 4 页和第 2 页 并保留 cookie 的值 但是现在当我注销并再次登录时
  • RxJS 更新,类型“typeof Observable”上不存在属性“merge”

    我更新了我的材质角度项目 以在表中包含可扩展的详细信息行 为此 我需要升级到 rsjx 6 现在我收到以下错误 我对角度完全陌生 所以不幸的是我不知道如何解决这个问题 Property merge does not exist on typ
  • 发送带有授权标头的 axios get 请求

    我尝试使用 vue js 发送 axios get 请求 当不需要发送标头时它工作得很好 但是 当需要发送授权 jwt 时 我收到 CORS 错误 对预检请求的响应未通过访问控制检查 请求的资源上不存在 Access Control All
  • 通过地理位置获取用户的状态

    获取美国用户所在州的最有效方法是什么 HTML5 地理定位是否是一种无需涉及谷歌地图的选项 这里有几个 JavaScript 和 JSON 的例子 在jQuery http jquery com 使用IP查找方法 借助IPinfoDB ht
  • UITableView - 使用 Swift 注册类

    其他人在使用时遇到问题吗tableView registerClass方法与斯威夫特 它不再为我提供代码补全 如果手动键入 我也不能使用它 但它仍然在标题中 它对我来说非常有效 self tableView register UITable
  • CGAL:继承和内核

    CGAL问题 我正在尝试向点类添加一个属性 我想第一步是继承一个内核并用我自己的从 CGAL 继承的点类替换点类 但只是想迈出这小小的第一步 我就遇到了麻烦 编辑 根据下面的评论 我将继承更改为手册中描述的方式 下面的代码给出了以下编译错误
  • 程序集 32 位打印显示在 qemu 上运行的代码,无法在真实硬件上运行

    我已经用 x86 汇编语言编写了一小段在裸硬件上运行的代码 此时 它已启用受保护的 32 位模式 然而 我遇到了与屏幕打印有关的问题 我读到 要在不中断的情况下执行此操作 可以将字符加载到特殊的内存区域 即 RAM 地址 0xb8000 知
  • C++ new、delete 和函数

    这对我来说有点不清楚 所以 如果我有一个函数 char test int ran char ret new char ran process return ret 然后多次调用它 for int i 0 i lt 100000000 i c
  • 搜索过滤器:最少字符数

    这是我用于至少 3 个字符检查的简单代码 如果查询是全数字的 我想例外 代码还可以选择按案例 ID 进行搜索 案例 ID 少于 3 个字符 感谢帮助 用这个 if strlen POST Search gt 3 is numeric POS
  • AutoMapper:将接口映射到抽象类 - 这可能吗?

    我在用着自动映射器 http automapper codeplex com在我的应用程序的不同层之间映射对象 一方面 我有一个如下所示的界面 public interface MyRepo IEnumerable
  • 如何获得 OxyPlot 中的所有颜色?

    我有一个问题 我在 WPF C 中使用 OxyPlot 我需要将所有颜色设置为系列的 MarkerType 和 MarkerStroke 我怎样才能获得所有颜色 Green IndianRed 等是静态 OxyColors 类中的静态字段
  • javax.el.PropertyNotFoundException:在 JSP 中使用 JSTL [重复]

    这个问题在这里已经有答案了 我有一个 JSP 我尝试使用 JSTL 标记来显示类的内存实例中的数据 该数据由一系列字符串组成 其中每个字符串都是 RSS 提要的地址 在 JSP 中 我有以下代码 table border 1 tr tr t
  • view.invalidate() 无法重绘 imageview

    好吧 伙计们 这可能听起来很愚蠢 但我已经用头撞键盘有一段时间了 试图找出为什么这不会刷新 基础知识 我有一个小示例应用程序 我正在测试它是否可以将图像围绕一个点旋转 X 度 并一次显示一个度以制作平滑的动画 所以我有一个很棒的示例 我发现
  • 如何根据键名合并2个数组并根据合并后的值进行排序?

    假设我有两个列表 const listA apple 100 banana 50 pearl 10 cherry 5 kiwi 3 const listB peach 30 apple 15 kiwi 10 mango 5 问题是如何将两个