You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter与Firebase Firestore中实现价格区间筛选功能

价格区间筛选功能实现方案

核心逻辑为:先对输入的最小、最大价格做合法性校验,再判断每条数据的价格字段是否满足 最小价格 ≤ 目标价格 ≤ 最大价格 条件,满足条件的数据即为筛选结果。以下是不同场景的具体实现方式:

前端JS数组筛选实现

  • 输入校验规则
    • 空值处理:如果用户未输入最小价格,默认设为0;未输入最大价格,默认设为无穷大Infinity
    • 类型转换:将输入的字符串格式价格转成Number类型,避免字符串比较出现逻辑错误
    • 边界校验:如果最小价格大于最大价格,自动交换两个值,也可根据业务需求直接提示用户输入错误
  • 代码示例
// 示例数据源
const productList = [
  {id: 1, name: '商品A', price: 29.9},
  {id: 2, name: '商品B', price: 99.9},
  {id: 3, name: '商品C', price: 159},
  {id: 4, name: '商品D', price: 299}
]

// 筛选函数
function filterByPriceRange(list, minInput, maxInput) {
  // 处理输入值
  const minPrice = isNaN(Number(minInput)) ? 0 : Number(minInput)
  const maxPrice = isNaN(Number(maxInput)) ? Infinity : Number(maxInput)
  const actualMin = Math.min(minPrice, maxPrice)
  const actualMax = Math.max(minPrice, maxPrice)
  // 执行筛选
  return list.filter(item => item.price >= actualMin && item.price <= actualMax)
}

// 调用示例:筛选价格在50~200之间的商品
const result = filterByPriceRange(productList, 50, 200)
// 输出结果包含商品B、商品C

后端SQL查询实现

如果直接从数据库查询筛选结果,可直接在WHERE条件中加区间判断,同时处理参数为空的场景:

-- 示例:查询price在minPrice和maxPrice区间的商品
SELECT * FROM products 
WHERE 
  price >= COALESCE(?, 0) -- ?为传入的最小价格参数,为空时默认从0开始
  AND price <= COALESCE(?, 99999999) -- ?为传入的最大价格参数,为空时默认到足够大的数值

如果需要兼容最小价格大于最大价格的异常输入,可以用LEAST和GREATEST函数处理:

SELECT * FROM products 
WHERE 
  price >= LEAST(COALESCE(?, 0), COALESCE(?, 99999999))
  AND price <= GREATEST(COALESCE(?, 0), COALESCE(?, 99999999))

注意:如果你的价格字段存储的是分单位的整数(用于避免浮点精度问题),需要先把传入的元单位价格乘以100转成分之后再做比较。

内容的提问来源于stack exchange,提问作者Rasm Mdv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:09:00