从 json 检索唯一值

retrieve unique values from the json

我知道这应该很容易,但我就是无法让它工作。我有一个具有以下结构的对象:

"name": "Machine 1",
"categories": [
  {
    "name": "Planned",
    "days": [
      {
        "id": 0,
        "date": "2015-09-14T00:00:00",
        "time": 768
      },
      {
        "id": 0,
        "date": "2015-09-15T00:00:00",
        "time": 1100
      },
      {
        "id": 0,
        "date": "2015-09-16T00:00:00",
        "time": 356
      }
    ]
  },
  {
    "name": "Item 1",
    "days": [
      {
        "id": 0,
        "date": "2015-09-14T00:00:00",
        "time": 1323
      },
      {
        "id": 0,
        "date": "2015-09-15T00:00:00",
        "time": 1475
      },
      {
        "id": 0,
        "date": "2015-09-16T00:00:00",
        "time": 668
      }
    ]
  },

因此,如果我想以树状结构显示它,返回的对象将如下所示

我正在尝试做什么而不是我当前的方法(手动迭代)

            angular.forEach(machine.categories, function (category, index) {
                angular.forEach(category.days, function (day, index) {
                    newData.labels.push(day.date);
                });
            });

是使用一个已经存在的库(根据我的研究,underscore.js 应该非常适合这个)并且正确地做它(我正在努力学习,如何使用它)。

所以我想要实现的是获取日期格式的唯一日期列表。所以我得到的对象看起来像这样:

var result = ["2015-09-14", "2015-09-15", "2015-09-16"](这个会更好)

有没有办法使用库来完成它(意味着无需手动迭代)?

您可以使用 Set 作为唯一值

var data = { "name": "Machine 1", "categories": [{ "name": "Planned", "days": [{ "id": 0, "date": "2015-09-14T00:00:00", "time": 768 }, { "id": 0, "date": "2015-09-15T00:00:00", "time": 1100 }, { "id": 0, "date": "2015-09-16T00:00:00", "time": 356 }] }, { "name": "Item 1", "days": [{ "id": 0, "date": "2015-09-14T00:00:00", "time": 1323 }, { "id": 0, "date": "2015-09-15T00:00:00", "time": 1475 }, { "id": 0, "date": "2015-09-16T00:00:00", "time": 668 }] }] }; 

var set = new Set();

data.categories.forEach(e => e.days.forEach(e => set.add(e.date)));

document.write('<pre>' + JSON.stringify(Array.from(set)) + '</pre>');

使用下划线(有点冗长,假设您在名为 data 的变量中解析了 JSON):

var result = _.uniq(
               _.flatten(
                 _.map(data.categories, function(category) {
                   return _.map(_.pluck(category.days, 'date'), function(date) {
                     return date.replace(/T\d+:\d+:\d+$/, '');
                });
             })));