JS / JSX получить массив родительского ключа или объединить с вложенными элементами - PullRequest
0 голосов
/ 11 января 2019

У меня есть следующий объект с массивами:

{
  "brands": [
    "accessible-icon",
    "accusoft",
    "adn",
    "adobe",
    "adversal",
  ],
  "regular": [
    "address-book",
    "address-card",
    "angry",
    "bell",
  ],
  "solid": [
    "ad",
    "address-book",
    "address-card",
    "adjust",
    "air-freshener",
    "align-center",
  ]
}

У меня есть функция, которая возвращает один элемент из одной из групп массивов. Я должен выяснить, из какой группы массивов был извлечен элемент. Из того, что я понял, невозможно найти родительские ключи в js?

Было бы идеально получить родительский ключ, в противном случае возможно ли добавить родительский ключ ко всем вложенным элементам? Например, вложенные элементы в массиве brands будут иметь вид:

 "brands": [
    "brands-accessible-icon",
    "brands-accusoft",
    "brands-adn",
    "brands-adobe",
    "brands-adversal",
  ],

Тогда я могу использовать регулярные выражения для извлечения brands.

Дополнительная информация:

Изначально я превращаю объекты в объекты с группами массивов. Вот пример одного из объектов с именем brands:

{
  "faAccessibleIcon": {
    "prefix": "fab",
    "iconName": "accessible-icon",
    "icon": [
      448,
      512,
      [],
      "f368",
    ]
  },
  "faAccusoft": {
    "prefix": "fab",
    "iconName": "accusoft",
    "icon": [
      640,
      512,
      [],
      "f369",
    ]
  },
  "faAcquisitionsIncorporated": {
    "prefix": "fab",
    "iconName": "acquisitions-incorporated",
    "icon": [
      344,
      512,
      [],
      "f6af",
    ]
  },
}

Тогда я упрощаю объекты:

const array = {
  "brands": Object.keys(brands).map(e=> brands[e].iconName),
  "regular": Object.keys(regular).map(e=> regular[e].iconName),
  "solid": Object.keys(solid).map(e=> solid[e].iconName),
};

И array становится объектом с массивами, которые видны вверху моего вопроса. Структура массива должна оставаться такой. Есть ли способ объединить prefix и iconName и получить brands-accessible-icon, brands-accusoft и т. Д. Во вложенных элементах массива для каждой группы массивов?

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Я думаю, что есть простой ответ на него.

const array = {
  "brands": Object.keys(brands).map(e=> "brands-"+brands[e].iconName),
  "regular": Object.keys(regular).map(e=> "regular-"+regular[e].iconName),
  "solid": Object.keys(solid).map(e=> "solid-"+solid[e].iconName),
};
0 голосов
/ 11 января 2019

Вот, пожалуйста.

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

(Если я не понял ваш вопрос, поскольку каждый ответ, кажется, делает что-то свое)

Рабочий пример:

const data = {
    "brands": [
        "accessible-icon",
        "accusoft",
        "adn",
        "adobe",
        "adversal",
    ],
    "regular": [
        "address-book",
        "address-card",
        "angry",
        "bell",
    ],
    "solid": [
        "ad",
        "address-book",
        "address-card",
        "adjust",
        "air-freshener",
        "align-center",
    ]
}

const result = Object.entries(data).reduce((acc, [key, value]) => ({ ...acc, [key]: value.map(obj => key + '-' + obj) }), {})

console.log(result)
0 голосов
/ 11 января 2019

Вы можете получить ключи объекта и найти значение в массиве.

const getKey = (object, value) => Object.keys(object).find(k => object[k].includes(value));

var data = { brands: ["accessible-icon", "accusoft", "adn", "adobe", "adversal"], regular: ["address-book", "address-card", "angry", "bell"], solid: ["ad", "address-book", "address-card", "adjust", "air-freshener", "align-center"] };

console.log(getKey(data, "bell"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...