اذهب إلى المحتوى

السؤال

نشر
import {ADD_TO_FAVORITE, REMOVE_FROM_FAVORITE, CLEAR_FAVORITE} from '../types';

interface InitStateInter {
  myFavorite: [];
}

const initialState: InitStateInter = {
  myFavorite: [],
};

const myFavorite = (state = initialState, action: any) => {
  switch (action.type) {
    case ADD_TO_FAVORITE:
      return {
        ...state,
        myFavorite: [...state.myFavorite, action.payload],
      };
    case REMOVE_FROM_FAVORITE:
      return {
        ...state,
        myFavorite: state.myFavorite.filter(
          favItem => favItem !== action.payload,
        ),
      };
    case CLEAR_FAVORITE:
      return {...initialState};
  }
  return state;
};

export default myFavorite;

عندما اضيف منتج اخر للمفضلة فانه يتحقق ان كان موجود لايضيفة مرة اخرى 

Recommended Posts

  • 1
نشر

يعتمد الأمر على بنية المنتج (العنصر الذي تضيفه للبطاقة) فإذا كان يحوي خاصية تدعى العدد quantity فعليك المرور على المصفوفة و البحث عن هذا العنصر و تعديل الخاصية فيه بزيادتها ب 1، وإن لم يكن موجود، تقوم بإضافته للمصفوفة 

case ADD_TO_FAVORITE: {

  let flag = false;

  this.itemsInCart.forEach(el => {
    if (el.itemId == itemDetails.objectId) {
      el.qty += 1;

      flag = true;

      return false;
    }
  })

  if (!flag) {
    this.itemsInCart.push({
      itemId: itemDetails.objectId,
      itemName: itemDetails.dishName,
      itemPrice: itemDetails.price,
      qty: 1
    });
  }


  return {
    ...state,
    myFavorite: [...state.myFavorite, action.payload],
  };
}

يمكن تحقيق ذلك بأكثر من طريقة..

array.indexOf(newItem) === -1 && array.push(newItem);

أو

Array.prototype.pushUnique = function (item){
    if(this.indexOf(item) == -1) {
        this.push(item);
        return true;
    }
    return false;
}

///////////////

var newItem = "NEW_ITEM_TO_ARRAY";
var array = ["OLD_ITEM_1", "OLD_ITEM_2"];

array.indexOf(newItem) === -1 ? array.push(newItem) : console.log("This item already exists");

console.log(array)

 

** إن كان العنصر موجود نزيد تكراره وإلا نضيفه، وبالحذف إن كان موجود نقلل تكراره وإن أصبح 0 نحذفه من المصفوفة

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...