Как я могу отфильтровать JSON по ключу в JSX - PullRequest
0 голосов
/ 04 марта 2020

У меня проблема при попытке отфильтровать JSON данные в приложении React ...

My JSON:


function fakeListReports()
{
    return [

  {
    id: 0,
    project: {
      id: 7,
      name: "Music Arena",

      /...more datas.../

    },
    redacteur: "Ced",

    /...more datas.../

  },
  {
    id: 1,
    project: {
      id: 1,

      /...more datas.../

    },
    redacteur: "Ced",

    /...more datas.../

  },
  {
    id: 2,
    project: {
      id: 1,
      name: "Planet Express",

      /...more datas.../

    },
    redacteur: "Ced",

    /...more datas.../

  }
];
}

Я хочу отфильтровать его по Идентификатор проекта. Я бы вернул список со всеми отчетами, относящимися к одному проекту, по его идентификатору ...

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

Мой код JSX:

const ListReportsByProject = ({ match }) => {
  const id = match.params;
  const [listReport, setListReport] = useState([]);
  const reports = fakeData.fakeListReports();

  const fetchReports = id => {
    console.log(reports);
    console.log(id.id);
    const reportsByProject = reports.filter(r => r.project.id === id.id);
    console.log(reportsByProject);
  };

  useEffect(() => {
    fetchReports(id);
  }, [id]);

  return (
    <div>
      <p>test route</p>
    </div>
  );
};

Можете ли вы мне помочь? У меня нет решения, несмотря на мои многочисленные поиски ...

Спасибо

Редактировать:

В переменной reportsByProject, когда, например, id.id = 1, я хочу получить JSON со всеми и только отчетами с идентификатором проекта = 1.

В этом примере reportsByProject должен быть равен:


[
  {
    id: 1,
    project: {
      id: 1,

      /...more datas.../

    },
    redacteur: "Ced",

    /...more datas.../

  },
  {
    id: 2,
    project: {
      id: 1,
      name: "Planet Express",

      /...more datas.../

    },
    redacteur: "Ced",

    /...more datas.../

  }
];

Функция фильтра всегда возвращает пустую вкладку .

Tu значение id.id правильное ...

1 Ответ

0 голосов
/ 04 марта 2020

Я нашел решение!

Проблема возникла из-за того, что id.id имел тип string. С анализом проблема решена!

Спасибо тем, кто пытался мне помочь.

 const fetchReports = id => {
    console.log(reports);
    console.log(id);
    const idProject = parseInt(id.id, 10);
    const reportsByProject = reports.filter((r) => r.project.id === idProject);
    console.log(reportsByProject);
};
...