I
https://paste.ofcode.org/4YEh9LmCziYJhnSdbjUZ3
Size: a a a
I
T
k
I
T
k
J
T
j
const randomInt = (min, max) => {
min = Math.ceil(min)
max = Math.floor(max)
return Math.floor(Math.random() * (max - min + 1) + min)
}
const range = (min, max) => Array.from(Array(max - min + 1), (_, i) => i + min)
const shuffle = (array) => {
array = array.slice()
for (let i = array.length - 1; i > 0; i--) {
const r = Math.floor(Math.random() * i);
[array[i], array[r]] = [array[r], array[i]]
}
return array
}
const randomRange1 = (min, max, total) => {
return shuffle(range(min, max)).slice(0, total)
}
const randomRange2 = (min, max, total) => {
const result = new Set()
while (result.size < total) {
result.add(randomInt(min, max))
}
return Array.from(result)
}
B
I
J
VD
FE
j
// Initial state - пустой массив
const CartReducer = (state = [], action) => {
switch (action.type) {
case 'ADD_TO_CART':
// Новый массив, старые значения + одно новое
return state.concat(action.payload)
case 'ADD_ANOTHER':
// Новый стейт, старые значения минус одно, одно новое
// Чтобы это работало в стейте уже должна быть такая pizza
// Зачем нужен ADD_ANOTHER и как ты это контролируешь не спрашиваю
return state.map(pizza => {
if (pizza.title === action.payload.title) {
return {
...pizza,
amountOrdered: pizza.amountOrdered + action.payload.amountOrdered
}
}
return pizza
})
case 'REMOVE_FROM_CART':
// Новый стейт, старые значения минус одно
return state.filter((pizza) => pizza.title === action.payload[0].title)
default : return state
}
}
XM
I
АД
I
N