तो मैं मूल रूप से यह कहने की कोशिश कर रहा हूं कि "मुझे सभी जोड़े गए आइटम दें जो वास्तव में कार्ट में नहीं जोड़े गए थे" नीचे मेरे फ़िल्टर फ़ंक्शन के साथ। यदि जोड़ा गया कोई भी उत्पाद आईडी कार्ट इटम्स आईडी में नहीं पाया जा सकता है तो उसे उन वस्तुओं को वापस कर देना चाहिए। लेकिन इसके बजाय unaddedCartItems एक खाली सरणी है जब मुझे पता है कि जोड़े गए आइटम आईडी हैं जो किसी भी कार्ट इटम्स आईडी के समान नहीं हैं। क्या किसी को यह पता है कि इसे कैसे हासिल किया जाए?

const unaddedCartItems = addedItems.filter((addedItem) => {
    cartItems.forEach((cartItem) => {
        return cartItem.id !== addedItem.productId;
    });
});
0
FairyQueen 27 मार्च 2018, 20:35

3 जवाब

सबसे बढ़िया उत्तर

ऐसा इसलिए है क्योंकि आपका return, forEach के अंतर्गत नेस्टेड है और आप अपने filter में वह मान वापस नहीं कर रहे हैं। इसके बजाय, find का उपयोग करें:

const unaddedCartItems = addedItems.filter( addedItem => {
    return !cartItems.find( cartItem => cartItem.id === addedItem.productId );
});

find एक सरणी के माध्यम से तब तक लूप करता है जब तक कि उसे एक मेल खाने वाली वस्तु न मिल जाए। इसका मतलब यह है कि अगर उसे cartItems में आईडी मिलती है, तो वह तुरंत लूप को रोक देगा और आइटम वापस कर देगा।

3
Chase DeAnda 27 मार्च 2018, 17:52

क्योंकि आपका रिटर्न forEach के अंतर्गत नेस्टेड है और आप अपने फ़िल्टर में उस मान को वापस नहीं कर रहे हैं

0
Ashraf Samir 27 मार्च 2018, 17:47

क्या some का उपयोग यहां काम करेगा?

const unaddedCartItems = addedItems.filter((addedItem) => 
    !cartItems.some(cartItem => cartItem.id === addedItem.productId);
2
emjrose 27 मार्च 2018, 17:43