Есть ли простой способ перебрать объект, значения которого являются массивами объектов, чтобы создать список из значений этих объектов - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть объект JSON, который я импортирую на реагирующую страницу, похожую на следующую:

const obj1 = {
  "January": [
    {
      "Id": 1,
      "FileName": "some file",
      "Format": "Excel (.xlsx)",
      "Category": "some category 1",
      "Start": "01/01/2019",
      "End": "12/31/2019",
      "Created": "01/09/2019"
    },
    {
      "Id": 2,
      "FileName": "some big file",
      "Format": "Excel (.xlsx)",
      "Category": "some category 2",
      "Start": "01/01/2018",
      "End": "12/31/2018",
      "Created": "01/09/2019"
    }
  ],
  "February": [
    {
      "Id": 3,
      "FileName": "some small file",
      "Format": "PDF (.pdf)",
      "Category": "some category 3",
      "Start": "01/01/2018",
      "End": "12/31/2018",
      "Created": "01/09/2019"
    },
    {
      "Id": 4,
      "FileName": "some other file",
      "Format": "Excel (.xlsx)",
      "Category": "some category 4",
      "Start": "01/01/2018",
      "End": "12/31/2018",
      "Created": "01/09/2018"
    }
  ],
  "March": [
    {
      "Id": 55,
      "FileName": "some file again",
      "Format": "Excel (.xlsx)",
      "Category": "some category 5",
      "Start": "01/01/2017",
      "End": "12/31/2017",
      "Created": "01/09/2017"
    }
  ]
};

, и я хочу перебрать вышеуказанные объекты и динамически заполнить параметры выбранного выпадающего элемента каждым уникальнымкатегория.

Выбор будет выглядеть примерно так:

<select className="selectpicker" data-width="fit" value="All" onChange={this.addSomeOptions}>
  <option >Category 1</option>
  <option >Category 2</option>
  <option >Category 3</option>
</select>

Есть ли хороший способ сделать это? Спасибо!

Ответы [ 2 ]

2 голосов
/ 04 ноября 2019

вы можете попробовать сгладить массив и отобразить его, чтобы извлечь значения

Object.values(obj1).flat().map((a)=> a.Category)

Вы можете опустить flat(), если массив всегда одномерный

Результат:

["some category 1", "some category 2", "some category 3", "some category 4", "some category 5"]
0 голосов
/ 04 ноября 2019

Если underscore - это опция, я бы выбрал:

let Categories = [];
for (let x of obj1) {
    Categories.push(x.Category);
}
let uniqueCategories = _.uniqWith(Categories, _.isEqual);
return uniqueCategories;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...