从数组中删除重复的对象但合并嵌套对象

2024-01-31

当前有一系列包含游戏版本的对象。然而,游戏发布可以在多个平台上进行,并且这些平台在数组中显示为单独的对象。我希望通过比较游戏 ID 来删除重复的游戏,但合并平台对象

我尝试过使用reduce函数,它成功地通过游戏id删除了重复的对象,但我无法适应合并平台

const filteredArr = data.reduce((acc, current) => {
  const x = acc.find(item => item.game.id === current.game.id);

  if (!x) {
    return acc.concat([current]);
  } else {
    return acc;
  }
}, []);

当前数组:

const data = [{
  "id": 157283,
  "date": 1553212800,
  "game": {
    "id": 76882,
    "name": "Sekiro: Shadows Die Twice",
    "popularity": 41.39190295640344
  },
  "human": "2019-Mar-22",
  "m": 3,
  "platform": {"id": 48, "name": "PlayStation 4"},
  "region": 8,
  "y": 2019
}, {
  "id": 12,
  "date": 1553212800,
  "game": {
    "id": 76832,
    "name": "Spiderman",
    "popularity": 41.39190295640344
  },
  "human": "2019-Mar-22",
  "m": 3,
  "platform": {"id": 6, "name": "PC (Microsoft Windows)"},
  "region": 8,
  "y": 2019
}, {
  "id": 157283,
  "date": 1553212800,
  "game": {
    "id": 76882,
    "name": "Sekiro: Shadows Die Twice",
    "popularity": 41.39190295640344
  },
  "human": "2019-Mar-22",
  "m": 3,
  "platform": {"id": 48, "name": "Xbox"},
  "region": 8,
  "y": 2019
}]

合并后的预期格式:

[{
  "id": 157283,
  "date": 1553212800,
  "game": {
    "id": 76882,
    "name": "Sekiro: Shadows Die Twice",
    "popularity": 41.39190295640344
  },
  "human": "2019-Mar-22",
  "m": 3,
  "platforms": ["PlayStation", "Xbox"],
  "region": 8,
  "y": 2019
}, {
  "id": 12,
  "date": 1553212800,
  "game": {
    "id": 76832,
    "name": "Spiderman",
    "popularity": 41.39190295640344
  },
  "human": "2019-Mar-22",
  "m": 3,
  "platforms": ["Playstation"],
  "region": 8,
  "y": 2019
}]

你真的很接近,你只需要稍微改变一下逻辑。您可以尝试以下操作;一个例子 -https://repl.it/@EQuimper/ScaryBumpyCircle https://repl.it/@EQuimper/ScaryBumpyCircle

const filteredArr = data.reduce((acc, current) => {
  const x = acc.find(item => item.game.id === current.game.id);

  if (!x) {
    current.platform = [current.platform]
    acc.push(current);
  } else {
    x.platform.push(current.platform);
  }

  return acc;
}, []);

返回值为

[
  {
    "id": 157283,
    "date": 1553212800,
    "game": {
      "id": 76882,
      "name": "Sekiro: Shadows Die Twice",
      "popularity": 41.39190295640344
    },
    "human": "2019-Mar-22",
    "m": 3,
    "platform": [
      {
        "id": 48,
        "name": "PlayStation 4"
      },
      {
        "id": 48,
        "name": "Xbox"
      }
    ],
    "region": 8,
    "y": 2019
  },
  {
    "id": 12,
    "date": 1553212800,
    "game": {
      "id": 76832,
      "name": "Spiderman",
      "popularity": 41.39190295640344
    },
    "human": "2019-Mar-22",
    "m": 3,
    "platform": [
      {
        "id": 6,
        "name": "PC (Microsoft Windows)"
      }
    ],
    "region": 8,
    "y": 2019
  }
]

如果您只想拥有一个平台字符串数组,请使用

const filteredArr = data.reduce((acc, current) => {
  const x = acc.find(item => item.game.id === current.game.id);

  if (!x) {
    current.platform = [current.platform.name]
    acc.push(current);
  } else {
    x.platform.push(current.platform.name);
  }

  return acc;
}, []);

现在的返回值为

[
  {
    "id": 157283,
    "date": 1553212800,
    "game": {
      "id": 76882,
      "name": "Sekiro: Shadows Die Twice",
      "popularity": 41.39190295640344
    },
    "human": "2019-Mar-22",
    "m": 3,
    "platform": [
      "PlayStation 4",
      "Xbox"
    ],
    "region": 8,
    "y": 2019
  },
  {
    "id": 12,
    "date": 1553212800,
    "game": {
      "id": 76832,
      "name": "Spiderman",
      "popularity": 41.39190295640344
    },
    "human": "2019-Mar-22",
    "m": 3,
    "platform": [
      "PC (Microsoft Windows)"
    ],
    "region": 8,
    "y": 2019
  }
]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从数组中删除重复的对象但合并嵌套对象 的相关文章

  • Android 设备上的 PhoneGap 蓝牙插件

    我一直在尝试让 PhoneGap 工作的蓝牙插件 但我似乎不知道哪里出了问题 首先 我的测试设备是 Galaxy S3 GT 19305T 应用程序是使用PhoneGap CLI http docs phonegap com en 3 0
  • 交换关联数组中的两个项目

    Example arr array apple gt sweet grapefruit gt bitter pear gt tasty banana gt yellow 我想调换一下柚子和梨的位置 这样数组就变成了 arr array ap
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • 从数组中删除空白元素

    当我从 ruby on Rails 表单中保存多个选择时 它似乎在前面添加了一个空白元素 我该如何删除它 该字段为 selected player utf8 gt authenticity token gt H8W7qPBezubyeU0a
  • 我想检查 $('#td1').text() === "x" 是否?

    我想检查innerHtml是否有X或O 所以我不能再次添加任何其他东西 但它不起作用 添加检查代码后它就停止了 我在这里尝试做一个简单的XO游戏来更熟悉javascript和jquery 我也不确定是否可以用 jQuery 做到这一点
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • Javascript正则表达式用于字母字符和空格? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要一个
  • Node.js:如何在检索数据(块)时关闭响应/请求

    我正在用 node js 构建一个应用程序 它加载多个页面并分析内容 因为 node js 发送块 所以我可以分析这些块 如果一个块包含例如索引 nofollow 我想关闭该连接并继续其余部分 var host example com to
  • 从未用 @flow 标记的导入文件中获取类型定义

    TL DR我怎么告诉flow从未声明的导入模块导入类型定义 flow 加长版 流接缝能够从不使用流语法的文件中派生类型 请参阅示例 示例文件 flow js if Math random lt 0 5 var y hello else va
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • Firefox 书签探索未超过 Javascript 的第一级

    我已经编写了一些代码来探索我的 Firefox 书签 但我只获得了第一级书签 即我没有获得文件夹中的链接 e g 搜索引擎 雅虎网站 谷歌网站 在此示例中 我只能访问 Search engines 和 google com 不能访问 yah
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • 如何获取给定 DOM 元素的所有定义的 CSS 选择器?

    如何使用 jQuery 获取给定 DOM 元素的所有定义的 CSS 选择器 定义后 我的意思是在应用于任何样式表的所有 CSS 选择器document 在某种程度上 这类似于 FireBug 实现的功能 其中显示所选 DOM 元素的所有应用
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构
  • fullCalendar 未显示正确的结束日期

    我正在看调试页面 http jsbin com wukofacaxu edit js outputFullCalendar 官方网站的 我想安排一个活动时间为 22 09 2015 至 30 09 2015 dd mm yyyy 但它只显示

随机推荐

  • 如何在 obj-C 的 C 函数中向自己发送消息?

    我有一个 C 函数 音频队列服务中的回调函数 我想向自己发送消息 怎么做 如果我输入 self message 则会出现错误 Use of undeclared identifier self 您不会在实时回调中执行 objc 消息 例如音
  • Guzzle HTTP 请求从 POST 转换为 GET

    当我尝试向外部 API 发布帖子时 发生了一件非常奇怪的事情 我尝试向 URL 发出 POST 请求 但 Guzzle 发出 GET 请求 这是对此 API 的合法操作 但返回不同的内容 这是代码 request this gt clien
  • 在 ember 中如何在 Ember.Object.extend 上创建一个可以访问 json 服务的类方法

    很抱歉问这样一个简单的问题 但我正在考虑从 jQuery 迁移到 Ember 并试图在不使用 ember data 的情况下找出调用 响应 json 我的一个问题是人们如何建议使用类方法 举例来说 我有一个像这样的帖子对象 Hex Post
  • ARM ELF 对象内的函数大小不正确

    readelf 目标文件的输出 Symbol table symtab contains 15 entries Num Value Size Type Bind Vis Ndx Name 0 00000000 0 NOTYPE LOCAL
  • 通过CSS改变PNG图像的颜色?

    给定一个显示白色简单形状的透明 PNG 是否有可能通过 CSS 以某种方式改变它的颜色 某种覆盖或什么不是 您可以使用过滤器 webkit filter and filter 过滤器对于浏览器来说相对较新 但根据以下 CanIUse 表 超
  • java.net.URLEncoder.encode(String) 已弃用,我应该使用什么代替?

    我在使用时收到以下警告java net URLEncoder encode warning deprecation encode java lang String in java net URLEncoder has been deprec
  • 有条件地将列设置为 Postgres 中的默认值

    我有一个 PostgreSQL 8 4 表 其中有一个自动递增但可为空的整数列 我想更新一些列值 如果该列为 NULL 则将其设置为其默认值 这将是从序列自动生成的整数 but无论哪种情况我都想返回它的值 所以我想要这样的东西 UPDATE
  • 使用 ruby​​ 将存储为有符号的无符号整数转换回原始值

    C 程序将它认为是 64 位无符号整数放入 Postgres 数据库中类型为 int8 的列中 对于 Postgres int8 始终是 signed int8 没有 unsigned int8 这样的东西 因此 我的 Ruby 程序将从
  • Codeigniter 和 PHPWord

    我正在尝试阅读一些文件 所以我使用PHPWord 这是我在图书馆里得到的
  • Swift 2 为协议添加了协议一致性

    我可以通过 swift 扩展向协议添加协议一致性吗 Plain old protocol here protocol MyData var myDataID Int get 我想做MyData协议默认相等 只需比较ID extension
  • 让 Json.NET + MongoDB Bson 协同工作

    我正在尝试将一些 Json NET json 序列化与 MongoDB 结合起来 我有一个与此类似的结构 public class Master props public Detail Details get set public clas
  • 黄油刀不会注射

    我正在尝试使用牛油刀 http jakewharton github io butterknife 这些天我在 Android Studio 工作 但它因一些奇怪的问题而让我失望 我曾经在 eclipse 上尝试过 Butter Knife
  • 关闭 Java 8 流

    如果我们像这样使用 Java 8 Streamlist stream filter collect 这个流什么时候关闭 作为下一个示例 我们关闭流是一种好的做法吗 Stream
  • 玩!框架 2 Android 客户端的 REST 身份验证和授权

    我目前正在开发一个具有网页版本 Play Framework 2 2 x 和 Android 客户端的应用程序 因为玩 完全 RESTful 我想在 Play 之间进行通信 以及带有 JSON 请求和响应的 Android 该应用程序的 W
  • 如何从当前文件夹外部导入模块?

    我正在尝试从其目录外部导入模块a py 该目录看起来像这样 project folder 1 a py folder 2 init py b py 我的代码在a py中 contents of a py from folder 2 impo
  • angularjs 路线 - 跳转到路线链接上的特定页面部分

    我正在尝试在 Angular 锚点和路由之间进行某种混合 我确实可以在主页中使用它 因为锚点部分在那里 但是 如果我在另一个页面中 它就不会 谁能指出我正确的方向 如何正确地做到这一点 这是我到目前为止所拥有的 freddoApp conf
  • 在电子邮件中嵌入标识符

    我正在尝试将 ID 嵌入到电子邮件中 以便当收件人回复我的系统发出的电子邮件时 我的系统可以拾取它并将两者匹配在一起 我尝试附加自定义标头 但是当用户回复时 该标头会被删除 我尝试在电子邮件中嵌入 HTML 评论 但 Outlook 在创建
  • 在 Java/JavaFX 中向变量添加监听器,该监听器在变量更改时被调用

    我知道JavaFX中有侦听器 并且我确定Java 但我对如何实施它们感到困惑 我有一个布尔变量 它在我的程序中不断变化 每次更改布尔值时 我都希望运行一个函数 myFunc 这很容易做到吗 如果您使用 JavaFX 2 那么它为 JavaB
  • 在 C# 中查找并替换树节点

    我的 C 代码中有一个树视图 我想在单击按钮时将整个树视图中出现的所有树节点替换为不同的文本 例如 我有 3 次出现 文本 为 手动 的节点 我想用文本 自动 替换所有这 3 个节点 问题是这 3 个节点位于树视图中的 3 个不同分支下 它
  • 从数组中删除重复的对象但合并嵌套对象

    当前有一系列包含游戏版本的对象 然而 游戏发布可以在多个平台上进行 并且这些平台在数组中显示为单独的对象 我希望通过比较游戏 ID 来删除重复的游戏 但合并平台对象 我尝试过使用reduce函数 它成功地通过游戏id删除了重复的对象 但我无