Итерация по реквизитам, но сортировка по другим реквизитам React JS - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть эта функция, которая сортирует массив по Дефекту (строка), однако я хочу перебрать счетчик (число).

getCount() {

let arr = this.state.rows
  let arr2 = arr.filter(qc => qc.BinsByDayByOrchardsQCs.length > 0).map((qc) =>
      qc.BinsByDayByOrchardsQCs.map((qc2) =>
          qc2.BinsByDayByOrchardsQCsDefects.map((qc3) => qc3).sort((a, b) 
              => a.Defect < b.Defect ? -1 : a.Defect > b.Defect ? 1: 0)));

        return arr2
    };

Эта функция возвращает

0: {BinsByDayByOrchardsQCsID: "-LbiHz7tuuJH71I_4IKw", Defect: "Bruise", Count: 2, BinsByDayByOrchardsQCs: null}
1: {BinsByDayByOrchardsQCsID: "-LbiHz7tuuJH71I_4IKw", Defect: "Hail damage", Count: 0, BinsByDayByOrchardsQCs: null}
2: {BinsByDayByOrchardsQCsID: "-LbiHz7tuuJH71I_4IKw", Defect: "Scuff", Count: 2, BinsByDayByOrchardsQCs: null}
3: {BinsByDayByOrchardsQCsID: "-LbiHz7tuuJH71I_4IKw", Defect: "Sunburn", Count: 1, BinsByDayByOrchardsQCs: null}

Мой массив отсортирован, однако внутри моей исходной функции я бы хотел перебрать Count, а не весь объект.

Это выглядело бы примерно так ..

 qc2.BinsByDayByOrchardsQCsDefects.map((qc3) => qc3.Count).sort((a, b) 
               => a.Defect < b.Defect ? -1 : a.Defect > b.Defect ? 1: 0)));

НоВ настоящее время я получаю "свойство" Дефект "не существует для типа" номер "

Следует также отметить, что я использую TypeScript с React

мой интерфейс
BinsByDayByOrchardsQCs: { BinsByDayByOrchardsQCsDefects: { Defect: string, Count: number }[] }[]

1 Ответ

1 голос
/ 30 апреля 2019

Причина, по которой вы получаете эту ошибку, заключается в том, что при использовании карты она по существу выведет массив, который содержит только значения count

qc2.BinsByDayByOrchardsQCsDefects.map((qc3) => qc3.Count)

Выходные данные:

[2, 0, 2 , 1]

Выследует сначала отсортировать, а затем сопоставить, попробуйте по-другому:

qc2.BinsByDayByOrchardsQCsDefects.sort((a, b) => a.Defect < b.Defect ? -1 : a.Defect > b.Defect ? 1: 0))).map((qc3) => qc3.Count);

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

ОБНОВЛЕНИЕ:

Я пропустил в вашем посте, что вы используете Typescript, попробуйте это, чтобы увидеть, работает ли он, как подсказано в этом посте

qc2.BinsByDayByOrchardsQCsDefects.sort((a, b) => a.Defect < b.Defect ? -1 : a.Defect > b.Defect ? 1: 0))).map((qc3) => (qc3 as any).Count);

Еще одно предложение - попытаться использовать qc3["Count"] вместо qc3.Count, Typescript почему-то не воспринимает эту вещь одинаково ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...