React Native中如何用数组过滤数组?过滤结果为空求助
解决筛选未加入购物车商品的问题
嘿,我来帮你搞定这个问题!首先得说清楚你原来的代码问题出在哪:你用forEach遍历cartItems的时候,forEach本身没有返回值,所以filter的回调函数相当于每次都返回undefined(也就是false),自然就得到空数组啦。
下面给你两种靠谱的实现方式:
方法1:用some判断是否存在
some会遍历数组,只要有一个元素满足条件就返回true,正好用来判断当前addedItem的ID是否在cartItems里存在:
const unaddedCartItems = addedItems.filter((addedItem) => { // 检查cartItems里有没有和当前addedItem ID匹配的项 const isInCart = cartItems.some(cartItem => cartItem.id === addedItem.id); // 取反,返回不在购物车里的项 return !isInCart; });
方法2:用Set优化性能(适合数据量大的场景)
如果你的cartItems数据量比较大,用Set来做查找会比每次遍历数组快很多(Set的查找是O(1)复杂度):
// 先提取所有购物车商品的ID到Set中 const cartItemIds = new Set(cartItems.map(item => item.id)); // 过滤出ID不在Set里的addedItems const unaddedCartItems = addedItems.filter(addedItem => !cartItemIds.has(addedItem.id));
再唠唠原代码为啥不行
你原来的代码大概是这个逻辑:
// 错误示例! const unaddedCartItems = addedItems.filter((addedItem) => { cartItems.forEach((cartItem) => { return cartItem.id !== addedItem.id; // 这个return只在forEach的回调里生效,外层拿不到 }); // 这里默认返回undefined,filter会把这个当成false,所以所有项都被过滤掉了 });
forEach只是执行遍历操作,不管你在里面写什么return,都不会给外层的filter回调函数传递返回值,这就是为啥明明有不匹配的项,结果却为空的原因~
内容的提问来源于stack exchange,提问作者FairyQueen
相关产品推荐
相关产品推荐

