Как мне добавить один и тот же элемент в массив несколько раз?

#javascript #arrays

#javascript #массивы

Вопрос:

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

Я сделал что-то вроде этого:

 [...state.shoppingCart, new Array(state.booksNumber).fill({...action.book})]
  

Но, конечно, это создает новый массив в array… Итак, как я могу просто добавить элементы в массив без удаления старых элементов или создания нового массива внутри массива?

Мне нужен функциональный способ, без циклов.

Комментарии:

1. Например, с помощью myArray.push (что-то)? На самом деле вы не предоставляете здесь достаточно кода, чтобы дать четкий ответ… Как именно вызывается вставленный вами код??

2. @Zachucks Я предполагаю, что таким образом он рекламирует только 1 элемент, но мне нужно, например, добавить 5 раз этот элемент за 1 клик…

3. Можете ли вы предоставить больше кода?

4. «Мне нужно создать функцию, которая добавляет элемент столько раз, сколько пользователь его выберет» — Почему? Просто сохраните, какой продукт и сколько из них (количество)

5. Или state.shoppingCart.concat(Array(state.boosNumber).fill(action.book)) — вам не нужно new или {...action.book}

Ответ №1:

 const newArray = new Array(state.booksNumber).fill({...action.book})
[...state.shoppingCart, ...newArray]
  

Комментарии:

1. добавление словесного объяснения часто бывает полезным

Ответ №2:

Просто снова используйте синтаксис распространения:

 [...state.shoppingCart, ...new Array(state.booksNumber).fill({...action.book})]
  

Это приведет к распространению нового массива на существующий массив.

Комментарии:

1. new может быть удален, .fill({...action.book}) может быть .fill(action.book)

2. @Thankyou многое можно изменить. Если вы хотите добавить другой ответ, не стесняйтесь. Этот ответ представляет собой минимальное изменение, необходимое для предоставления запрошенного результата.

3. И этот комментарий был минимальным изменением, необходимым для того, чтобы сделать код неплохим, lol: D

Ответ №3:

Вы можете использовать метод concat

  const a = new Array([1,3,4]).concat([1,3,4])
 console.log(a)
  

Это добавит элементы в массив.

Или вы можете попробовать с помощью оператора распространения.

 const arr=[1,2,3,4]
const a = new Array([1,3,4,.... arr]);
console.log(a)
  

Ответ №4:

Вам не хватает оператора распространения внутри возвращаемого массива для созданного вами нового массива.

Добавление оператора spread позволяет объединить оба элемента массива.

Например:

 const arrayOne = [1,2,3];
const arrayTwo = [4,5,6];
const mergedArrays = [...arrayOne, ...arrayTwo] //[1,2,3,4,5,6]
  

Также предполагается, что action.book есть объект, который вы хотите добавить несколько раз внутри new Array() созданного вами, нет необходимости распространять его, поскольку он заполнит массив каждым объектом.

Эта функция может помочь с тем, что вы ищете:

 const addMultipleItems = (action) => {
    const items = new Array(state.booksNumber).fill(action.book);
    return [...state.shoppingCart, ...items];
}
  

Комментарии:

1. Пожалуйста, добавьте объяснение к вашему ответу.