如何验证指定productID与orderID是否存在于数据库中
问题分析与解决方案
你的核心问题是用flatMap把每个返回项的orderID和productID拆成了独立的数组元素,彻底破坏了订单ID与商品ID的对应关系——后续判断时mapper只是单个字符串,根本不存在orderID和productID属性,逻辑自然无法成立。
正确实现方案(两种思路)
思路1:直接在过滤后的原数据中判断(最简洁高效)
无需额外整理数组,直接利用Array.some()方法检查是否存在匹配项:
const { data } = useFetchCollection("returns"); const filteredReturns = data.filter((mapper) => mapper.userID === userID); // 检查是否存在同时匹配目标orderID和productID的记录 const isExist = filteredReturns.some(item => { return item.orderID === userDetails[0].id && item.productID === id; });
some()方法会遍历数组,只要找到一个符合条件的项就立即返回true,适合做存在性判断,性能优于先映射再判断的方式。
思路2:先整理成带对应关系的结构(适合后续有其他复用需求)
如果需要保留订单与商品的对应关系供后续使用,可以用map将每对ID封装为对象:
const { data } = useFetchCollection("returns"); const filteredReturns = data.filter((mapper) => mapper.userID === userID); // 整理为包含对应关系的对象数组 const idPairs = filteredReturns.map(item => ({ orderID: item.orderID, productID: item.productID })); // 再进行存在性判断 const isExist = idPairs.some(pair => { return pair.orderID === userDetails[0].id && pair.productID === id; });
为什么原代码失败
你之前的flatMap会把每个返回项拆成两个独立的字符串元素,最终数组变成[order1, product1, order2, product2,...],完全丢失了“哪个订单对应哪个商品”的关联信息,后续判断时自然找不到mapper.orderID这类属性。
内容的提问来源于stack exchange,提问作者Dan JamesEngineer
相关产品推荐
相关产品推荐

