Итерация по каждому объекту в Tyopescript - PullRequest
0 голосов
/ 07 февраля 2020

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

product: {
    id: "id1",
    title: "ProductName 1",
    additionalDetails: {
    o1: {id: "pp1", label: "Text", content: [{id: "ppp1", label: "Tetetet"}]},
    o2: {id: "pp2", label: "Text2", content: [{id: "ppp2", label: "Tetetet2"}]} }
}

Я пытаюсь выполнить итерацию для каждого объекта.AdditionalDetails.object, но не могу. Мой код:

 Object.keys(product.additionalDetails).forEach((key: string) => {
          const additionalDetail = product[key];
          const idLabel: string = additionalDetail.id;
          const label: string = additionalDetail.label;
          const contentId: string = additionalDetail.content[0].id;
          const content = additionalDetail.content[1].label;
        });

Но это не работает. Чего мне не хватает?

Ответы [ 3 ]

1 голос
/ 07 февраля 2020

Перебирайте свойства AdditionalDetails, используя любой из Object.keys, Object.values или Object.entries.

const product = {
  id: "id1",
  title: "ProductName 1",
  additionalDetails: {
    o1: {
      id: "pp1",
      label: "Text",
      content: [{
        id: "ppp1",
        label: "Tetetet"
      }]
    },
    o2: {
      id: "pp2",
      label: "Text2",
      content: [{
        id: "ppp2",
        label: "Tetetet2"
      }]
    }
  }
}

for (const [k, v] of Object.entries(product.additionalDetails)) {
  console.log(`Detail ${k} has label ${v.label}`);
}
1 голос
/ 07 февраля 2020

Две ошибки:

Заменить product[key] на product.additionalDetails[key]

и

additionalDetail.content[1] не существует (content - это массив только с одним элемент внутри)

product= {
  id: "id1",
  title: "ProductName 1",
  additionalDetails: {
    o1: {
      id: "pp1",
      label: "Text",
      content: [{
        id: "ppp1",
        label: "Tetetet"
      }]
    },
    o2: {
      id: "pp2",
      label: "Text2",
      content: [{
        id: "ppp2",
        label: "Tetetet2"
      }]
    }
  }
}

Object.keys(product.additionalDetails).forEach( key => {
  const additionalDetail = product.additionalDetails[key]; // <-- Here
  const idLabel = additionalDetail.id;
  const label= additionalDetail.label;
  const contentId = additionalDetail.content[0].id;
  // const content = additionalDetail.content[1].label;  // <-- content[1] Doesn't exist
});
0 голосов
/ 07 февраля 2020

Вы пытаетесь получить индекс идентификатора массива

o1: {id: "pp1", label: "Text", content: [{id: "ppp1", label: "Tetetet"}]},

const contentId: string = additionalDetail.content.id;

Вам необходимо выбрать индекс массива, чтобы добраться до объекта, связанного с идентификатором содержимого. :

const contentId: string = additionalDetail.content[0].id;

Вы должны также инициализировать дополнительные детали с помощью const.

...