数组条件排序问题:按onSalePrice/price排序代码失效,求修复方案
问题分析与修复方案
你的代码逻辑核心问题是把整个商品数组当成单个商品来判断促销状态了——products是数组,根本没有onSale属性,自然没法正确区分不同商品的促销状态,导致排序逻辑完全失效。
正确的做法是在排序回调函数里,针对每一对要比较的商品,分别判断它们的促销状态,取对应的价格进行比较:
修复后的排序代码
const products = [ { price: 28.99, onSalePrice: 22.99, onSale: "True", }, { price: 26.99, onSalePrice: 22.99, onSale: "True", }, { price: 24.99, onSale: "False", }, ]; const sort = "lowest-price"; let tempProducts; if (sort === "lowest-price") { tempProducts = products.slice().sort((a, b) => { // 为每个商品获取用于排序的价格 const priceA = a.onSale === "True" ? a.onSalePrice : a.price; const priceB = b.onSale === "True" ? b.onSalePrice : b.price; return priceA - priceB; }); } console.log(tempProducts);
运行结果说明
执行后tempProducts的顺序会是:
- 两个促销价22.99的商品(顺序保持原数组中的相对位置,因为sort是稳定排序)
- 原价24.99的非促销商品
完全符合「促销品按促销价排序,非促销品按原价排序」的需求。
内容的提问来源于stack exchange,提问作者Dan JamesEngineer
相关产品推荐
相关产品推荐

