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

时间:2014-09-06 15:27:59

标签: javascript ruby-on-rails ruby json angularjs

我有一个由Ruby on Rails后端提供的JSON API。其中一个端点返回一个像这样结构化的对象数组

{
  "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
},

由于单个标题的下载类型不同,因此“标题”在多个对象中不是唯一的。我想要一个唯一的标题。

我正在考虑在模型中的Ruby on Rails中进行它,并且只是在JSON响应中发送它但是这不起作用,因为它显然需要整个数组来计算它们。我在前端使用角度,所以我认为它需要在控制器中完成。我还过滤表中的响应,并希望显示更新的唯一标题数。

以下是此页面的屏幕截图,以获得更好的视角。 http://i.imgur.com/Iu1Xajf.png

非常感谢,

Thomas Le

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

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

2 个答案:

答案 0 :(得分:1)

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]);
}

答案 1 :(得分:0)

也许最好同时重新构建数据,这样您也可以在以后轻松获取这些项目,以及快速查找标题数量,例如:在 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