从JSON API响应中获取属性的唯一值的计数

Get count of unique values of properties from JSON API response

本文关键字:唯一 属性 获取 JSON API 响应      更新时间:2023-09-26

我有一个JSON API,由RubyonRails后端提供服务。其中一个端点返回一个结构类似的对象数组

{
  "title_slug": "16-gaijin-games-bittrip-beat-linux-tar-gz",
  "platform": "Linux",
  "format": ".tar.gz",
  "title": "BIT.TRIP BEAT",
  "bundle": "Humble Bundle for Android 3",
  "unique_games": 9
},
{
  "title_slug": "17-gaijin-games-bittrip-beat-linux-deb",
  "platform": "Linux",
  "format": ".deb",
  "title": "BIT.TRIP BEAT",
  "bundle": "Humble Bundle for Android 3",
  "unique_games": 9
},

因为单个标题有不同类型的下载,所以"标题"在多个对象中不是唯一的。我只想统计一下唯一的头衔。

我曾想过在模型中用RubyonRails来做这件事,只在JSON响应中发送它,但这不起作用,因为它显然需要整个数组来计算它们。我在前端使用角度,所以我认为这需要在控制器中完成。我还在一个表中过滤响应,并希望显示唯一标题的更新编号。

这是一张页面截图,这是为了获得更好的视角。https://i.stack.imgur.com/DFx3L.png

非常感谢

Thomas Le

顺便说一句,这是一个我正在开发的网站,不会成为一个公共网站。它是一个数据库站点,保存了我从IndieGalaHumbleBundle购买的捆绑包的所有数据。我不会向公众提供这些链接。我让它比最低限度的功能更强大,因为它是我在GitHub上的一个开源项目,人们可以在本地使用它。

以防人们想知道为什么我在图片上列出了Humble Bundle的东西。

http://jsfiddle.net/hy7rasp4/

将您的数据聚合到一个由唯一键索引的数组中,然后您可以访问有关重复项和计数的信息。

var i,
    title,
    uniqueResults= {};
for (i in results) {
   title= results[i].title;
   if (!uniqueResults[title]) {
      uniqueResults[title]= [];
   }
   uniqueResults[title].push(results[i]);
}

也许同时重组数据会更好,这样你以后也可以很容易地获得这些项目,并快速查找标题数量,例如在JavaScript

// assuming arrayOfObjects
var objectOfTitles = {},
    i;
for (i = 0; i < arrayOfObjects.length; ++i) {
    if (!objectOfTitles.hasOwnProperty(arrayOfObjects[i].title)) {
        objectOfTitles[arrayOfObjects[i].title] = [];
    }
    objectOfTitles[arrayOfObjects[i].title].push(arrayOfObjects[i]);
}
var numberOfTitles = Object.keys(objectOfTitles).length;
// then say you choose a title you want, and you can do
// objectOfTitles[chosenTitle] to get entries with just that title