Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.10.2019, 16:53
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 14.08.2018
Сообщений: 43

Каким способом можно удалить из корзины товары с одинаковым id
Есть два товара id=1, id=2. Сначала добавили по id в корзину через map(), но как удалить по одному при нажатии на кнопку, если есть товары с одинаковым id? Буду признателен за любые идеи.

Последний раз редактировалось Marson, 24.10.2019 в 16:57.
Ответить с цитированием
  #2 (permalink)  
Старый 24.10.2019, 16:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 11,395

Сообщение от Marson
как удалить по одному, если есть товары с одинаковым id?
А откуда одинаковые, если идентификатор, это уникальное значение?
Ответить с цитированием
  #3 (permalink)  
Старый 24.10.2019, 16:58
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 14.08.2018
Сообщений: 43

добавили три с id=1, а потом нужно удалить один
Ответить с цитированием
  #4 (permalink)  
Старый 24.10.2019, 17:02
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 11,395

Сообщение от Marson
добавили три с id=1
Как такое возможно?! Товары при помещении в базу автоматически могут получать уникальные идентификаторы (средствами SQL). Если все товары в одной таблице, то у всех товаров не будет одинаковых ID. Если товары разбиваются на несколько таблиц, по числу глобальных категорий, тогда у товаров может быть один и тот же ID, если в корзину поместили товары из разных категорий. Но в этом случае нужно оперировать не только ID товара, но и ID категории.

Исключите неоднозначность в идентификаторах и проблема исчезнет.
Ответить с цитированием
  #5 (permalink)  
Старый 24.10.2019, 17:10
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 14.08.2018
Сообщений: 43

Это react:

let initialState = {
products: [
{id: 1, name: 'Apple'},
{id: 2, name: 'Orange'}
]
};

export const productsReducer = (state = initialState) => {
return state;
};


const Cart = (props) => {

debugger
let elementsCart = props.cart.cart.map((c) => {
return <div>
<h3>
<li >{c.name}</li>
</h3>
<button onClick={() => props.removeFromCart(c.id)}>Remove from cart</button>
</div>
});

return (

<div>
<div><h1>Cart: {" " + props.count}</h1></div>
<div>{elementsCart}</div>
<div>
{props.count === 0 && <div><h3>Nothing added to cart</h3><NavLink to='/market'>
<button>Add some at market</button>
</NavLink></div>}
</div>
</div>
)
};


const initialState = {
cart: []
};

export const cartReducer = (state = initialState, action) => {
switch (action.type) {
case 'ADD_TO_CART':
return {
...state,
cart: [...state.cart, action.payload]
};
case 'REMOVE_FROM_CART':
return {
...state,
cart: state.cart.filter(o => o.id !== action.payload)
};
default:
return state;
}
};


export const addToCart = (obj) => ({type: 'ADD_TO_CART', payload: obj});
export const removeFromCart = (id) => ({type: 'REMOVE_FROM_CART', payload: id});
Ответить с цитированием
  #6 (permalink)  
Старый 24.10.2019, 17:16
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 11,395

Сообщение от Marson
Это react:
Да пофигу, хоть Бейсик - одинаковые идентификаторы недопустимы!! Как не может иметь объект двух одинаковых свойств, а массив двух одинаковых ключей/индексов.

У вас в кармане паспорт, у него есть серия и номер. Паспорта с такой серией и номером больше ни у кого нет во всей стране. Даже если вы смените паспорт, эта серия и номер более использоваться не будет. Это суть уникальности, ибо было бы странным выставлять колье под ID 15, а спустя время под этим ID детский горшок.

Также и на страницах - недопустимо иметь на странице элементы с одинаковыми ID, ибо при обращении по такому ID будет возвращен первый найденный элемент.

И не надо искать костылей решения этой проблемы, наведите порядок с идентификацией своих товаров, это единственное и правильное решение.

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

Последний раз редактировалось laimas, 24.10.2019 в 17:21.
Ответить с цитированием
  #7 (permalink)  
Старый 24.10.2019, 19:55
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 14.08.2018
Сообщений: 43

Я пытался изменять id при добавлении в корзину в map(), но мне не удалось..
Ответить с цитированием
  #8 (permalink)  
Старый 24.10.2019, 20:10
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 11,395

Сообщение от Marson
Я пытался изменять id при добавлении в корзину
Их вообще нет необходимости менять, это единожды и навсегда данный товару уникальный идентификатор. Понимаете, уникальный! Допустим есть на странице 10 товаров, и каждый из них имеет, должен иметь, уникальный идентификатор. А значит и в корзине каждый товар будет под своим уникальным ID! А извлеченные из корзины данные для операции над ними, это будет объект, где идентификаторы товаров могут быть его свойствами, и ничто не будет утеряно, не будет конфликтов, так как и свойства объекта не будут повторяться.

Не в корзине нужно пытаться наводить порядок, наведите порядок в своей базе так, чтобы ID у каждого товара было уникальное. Например, если база это MySQL и подобная, то ID должен храниться в поле с автоинкрементом, иметь первичный ключ.
Ответить с цитированием
  #9 (permalink)  
Старый 24.10.2019, 21:02
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 14.08.2018
Сообщений: 43

Я понял, что они уникальные. Спасибо, вы мне донесли это)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как с помощью скрипта высчитать ширину полосы прокрутки? LADYX Элементы интерфейса 35 13.11.2017 12:50
Как сделать так чтобы по нажатию на кнопку выполнялась функция? Zombie_Killer Общие вопросы Javascript 11 06.07.2017 22:34
Как добавить кнопку изменить к элементу LLEEVV2020 Angular.js 3 10.03.2017 12:48
Как на чистом js добавить в объект другой объект? An1984tonn Общие вопросы Javascript 2 23.01.2017 21:02
как найти нужный объект? `p r o x y jQuery 2 05.05.2009 01:12