@@ -2,51 +2,29 @@ export class Cart{
2
2
cartBox = this . getFromLS ( ) || [ ] ; //объекты {item:{item}, S:3}
3
3
//надо в объекты {item:{item}, sizes:{S:3, M:2}}
4
4
5
- addToCart ( item = { name :'defName' , price :999 } , sizes = { XL :1 , XS :2 } ) {
6
- let incomKeys = Object . keys ( sizes ) ;
7
- console . log ( 'item = ' , item )
8
- console . log ( 'sizes = ' , sizes )
9
- if ( this . cartBox . length === 0 ) { //массив пуст - смело пушим!! 1 товар - 1 строка. item, sizes
5
+ addToCart ( item = { name :'defName' , price :999 } , sizes = { XXL :1 } ) {
6
+
7
+ if ( this . cartBox . length === 0 ) { //массив пуст - смело пушим!! 1 товар - 1 строка. item, sizes
10
8
this . cartBox . push ( { item, sizes} )
11
- console . log ( 'last:' , this . cartBox [ this . cartBox . length - 1 ] )
12
9
}
10
+ else { //массив не пуст
11
+ let matchItem = this . cartBox . find ( el => el . item . name === item . name ) //предполагаемое совпадение
13
12
13
+ if ( ! matchItem ) { //совпадения по имени нет - пушим
14
+ this . cartBox . push ( { item, sizes} )
15
+ }
16
+ else { //есть совпадение по имени. Сращиваем объекты размеров у входящего item и match
14
17
15
-
16
- if ( this . cartBox . length === 0 ) { //массив пуст - смело пушим!! для каждого размера по отдельности
17
- incomKeys . forEach ( incomSize => {
18
- this . cartBox . push ( { item, [ incomSize ] :sizes [ incomSize ] } ) //для каждого размера по отдельности
19
- console . log ( ' \n pushed {item,[incomSize]:sizes[incomSize]} :' , { item, [ incomSize ] :sizes [ incomSize ] } )
20
- } )
21
- } else {
22
- //проверить, есть ли совпадения по имени. Да - проверяем ключи. Нет - пушим
23
- let allMatches = this . cartBox . filter ( cartEl => cartEl . item . id === item . id ) ;
24
-
25
- if ( ! allMatches . length ) { //по имени не совпало - пушим!!
26
- incomKeys . forEach ( size => {
27
- this . cartBox . push ( { item, [ size ] :sizes [ size ] } ) //для каждого размера по отдельности
28
- } )
29
- } else { //по имени cовпало - проверяем ключи.
30
- // allMatches - это все совпавшие по имени с входящим элементы массива корзины
31
- incomKeys . forEach ( incomSize => {
32
- let match = false ;
33
-
34
- allMatches . forEach ( idMatchElem => {
35
-
36
- if ( idMatchElem [ incomSize ] ) {
37
-
38
- idMatchElem [ incomSize ] += sizes [ incomSize ] ;
39
- match = true ;
40
- }
41
- } )
42
- if ( ! match ) {
43
-
44
- this . cartBox . push ( { item, [ incomSize ] :sizes [ incomSize ] } )
18
+ Object . keys ( sizes ) . forEach ( incomSize => { //для каждого входящего размера
19
+ if ( matchItem . sizes [ incomSize ] ) { //...если в размерах совпавшего есть такой ключ, то...
20
+ matchItem . sizes [ incomSize ] += sizes [ incomSize ] //..плюсуем! и выходим досрачно
21
+ return
45
22
}
23
+ matchItem . sizes [ incomSize ] = sizes [ incomSize ] //а раз не вышли, то ключа не было - присваиваем новый ключ
46
24
} )
47
25
}
48
26
}
49
- // console.log('this CartBox = ',this.cartBox)
27
+ console . log ( 'this CartBox = ' , this . cartBox )
50
28
}
51
29
52
30
//убавить на 1 позицию данного товара - продумать, как быть с галками
@@ -56,17 +34,23 @@ export class Cart{
56
34
57
35
//сложить счётчики у всех товаров в корзине
58
36
totalItems ( ) {
59
- return this . cartBox . reduce ( ( initial , object ) => {
60
- return initial + Object . values ( object ) [ 1 ]
61
- // из-за путаницы с размерами у новых товаров пришлось делать "костыль", чтобы не переписывать все методы с нуля
37
+ return this . cartBox . reduce ( ( initial , cartString ) => {
38
+ let amountForString = 0 ;
39
+ Object . values ( cartString . sizes ) . forEach ( amountOfSize => {
40
+ amountForString += amountOfSize
41
+ } )
42
+ return initial + amountForString ;
62
43
} , 0 ) ;
63
44
} ;
64
45
65
46
//сложить цены у всех товаров в корзине, перемножив сумму размеров в ordered на цену товара
66
47
totalPrice ( ) {
67
- return this . cartBox . reduce ( ( initial , object ) => {
68
- return initial + Object . values ( object ) [ 1 ] * object . item . price
69
- // из-за путаницы с размерами у новых товаров пришлось делать "костыль", чтобы не переписывать все методы с нуля
48
+ return this . cartBox . reduce ( ( initial , cartString ) => {
49
+ let amountForString = 0 ;
50
+ Object . values ( cartString . sizes ) . forEach ( amountOfSize => {
51
+ amountForString += amountOfSize
52
+ } )
53
+ return initial + amountForString * cartString . item . price ;
70
54
} , 0 )
71
55
} ;
72
56
0 commit comments