Преобразовать объект в объект массива, но уменьшить на число символов имени ключа - PullRequest
1 голос
/ 29 апреля 2020

У меня есть этот объект:

{
mainTitle: "xx",
press1: {text: "xx", linkUrl: "xx", linkText: "xx"}
press1imgs: [{…}, {…}]
press2: {text: "xx", linkUrl: "xx", linkText: "xx"}
press2imgs: [{…}, {…}]
press3: {text: "xx", linkUrl: "xx", linkText: "xx"}
press3imgs: [{…}, {…}]
press4: {text: "xx", linkUrl: "xx", linkText: "xx"}
press4imgs: [{…}, {…}]
press5: {text: "xx", linkUrl: "xx", linkText: "xx"}
press5imgs: [{…}, {…}]
press6: {text: "xx", linkUrl: "xx", linkText: "xx"}
press6imgs: [{…}, {…}]
}

Я хотел бы уменьшить его до массива, но поместить все press1, press1imgs, press2, press2Imgs в один и тот же индекс. Если число после нажатия такое же, поместите в тот же индекс, так что в общей сложности будет 6 индексов, например:

[
{text: "xx", linkUrl: "xx", linkText: "xx", img: [{…}, {…}]},
{text: "xx", linkUrl: "xx", linkText: "xx", img: [{…}, {…}]},
{text: "xx", linkUrl: "xx", linkText: "xx", img: [{…}, {…}]},
{text: "xx", linkUrl: "xx", linkText: "xx", img: [{…}, {…}]},
{text: "xx", linkUrl: "xx", linkText: "xx", img: [{…}, {…}]},
{text: "xx", linkUrl: "xx", linkText: "xx", img: [{…}, {…}]},
]

Я смог преобразовать объект в массив и получить число от pressx, но потом я теряюсь в том, как действовать, с помощью Reduce, Filter, Map? Моя попытка:

 const mapped = Object.keys(this.content).map((key) => ({
    key: key,
    value: this.content[key],
  }));

  console.log(mapped);
  mapped.map((item) => {
    console.log(item.key.charAt(5));
    if (item.key.charAt(5)){

    }
  });

1 Ответ

1 голос
/ 29 апреля 2020

Поскольку ключи довольно динамичны c, я сомневаюсь, что методы массива - хороший выбор здесь. Я бы использовал al oop:

const input = this.content;
const results = [];
let i = 1;
while (input.hasOwnProperty('press' + i)) {
  results.push({
    ...input['press' + i],
    img: input['press' + i + 'imgs'],
  });
  i++;
}

Живой фрагмент:

const input = {
mainTitle: "xx",
press1: {text: "xx", linkUrl: "xx", linkText: "xx"},
press1imgs: [{}, {}],
press2: {text: "xx", linkUrl: "xx", linkText: "xx"},
press2imgs: [{}, {}],
press3: {text: "xx", linkUrl: "xx", linkText: "xx"},
press3imgs: [{}, {}],
press4: {text: "xx", linkUrl: "xx", linkText: "xx"},
press4imgs: [{}, {}],
press5: {text: "xx", linkUrl: "xx", linkText: "xx"},
press5imgs: [{}, {}],
press6: {text: "xx", linkUrl: "xx", linkText: "xx"},
press6imgs: [{}, {}]
}

const results = [];
let i = 1;
while (input.hasOwnProperty('press' + i)) {
  results.push({
    ...input['press' + i],
    img: input['press' + i + 'imgs'],
  });
  i++;
}
console.log(results);
...