@Nivaech

Как в JSX отобразить количество элементов функции map?

Есть страница с товарами. Функция map проходит по массиву с товарами с базы, отбирает товары заданной категории ("Some category" ), и выводит их на экран. Хочу, чтобы выше отображалось количество выведенных товаров. Как отобразить длину нового массива, созданного map?

Вот код.
<div className="products-list">
                        <Title title="Some Title" />
                        <div className="products-container">
                          <p> "Количество элементов категории в map здесь" </p>
                        </div>
                        <div className="products-container">
                        {filteredProducts.map(product => product.category === "Some, category" && 
                          <ProductCard 
                            key={product.id}
                            product = {product}
                          />
                        )}
                        </div>
                      </div>
  • Вопрос задан
  • 298 просмотров
Решения вопроса 4
@kova1ev
const products = filteredProducts.filter(product => product.category === "Some, category").map (item => {
                          return (
                          <ProductCard 
                            key={item.id}
                            product = {item}
                          />)} )
return (
  <div className="products-list">
                        <Title title="Some Title" />
                        <div className="products-container">
                          <p> {products.length} </p>
                        </div>
                        <div className="products-container">
                        {products}
                        </div>
                      </div>
)
Ответ написан
@LEXA_JA
Длина нового массива, созданного map, будет всегда равна длине оригинального массива. Просто в тех случаях, где условие не выполняется, там будет на реактовский элемент, а false. Нужно сделать filter вместо map.
const products = filteredProducts.filter(product => product.category === "Some, category");

const count = products.length;

return (
  <div className="products-list">
    <Title title="Some Title" />
    <div className="products-container">
        <p> {count} </p>
    </div>
    <div className="products-container">
      {products.map(product => (
          <ProductCard 
             key={product.id}
             product = {product}
           />
       ))}
     </div>
</div>
);
Ответ написан
rockon404
@rockon404 Куратор тега React
Frontend Developer
Вы неправильно используете метод map. Он используется для преобразования данных, но никак не для фильтрации. Для фильтрации используют соответствующий метод filter:
const someCategoryProducts =
  filteredProducts.filter(product => product.category === "Some, category");

return (
  <div>
    <div>{someCategoryProducts.length}</div>
    <div>{someCategoryProducts.map(mapFn)}</div>
  <div>
);
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
const items = filteredProducts.filter((product) => product.category === "Some, category");

return (
    <div className="products-list">
        <Title title="Some Title" />
        <div className="products-container">
            <p>{items.length}</p>
        </div>
        <div className="products-container">
            {items.map((product) => (
                <ProductCard
                    key={product.id}
                    product = {product}
                />
            )}
        </div>
    </div>
);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
25 апр. 2024, в 11:02
5000 руб./за проект
25 апр. 2024, в 10:42
150000 руб./за проект
25 апр. 2024, в 10:41
2000 руб./за проект