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

如何基于cars.json实现按名称、价格过滤的搜索筛选栏

实现带名称&价格双过滤的车辆列表组件

1. 确认cars.json数据结构

先确保你的cars.json是标准数组格式,示例如下:

[
  {
    "id": 1,
    "name": "特斯拉 Model 3",
    "price": 231900,
    "brand": "特斯拉"
  },
  {
    "id": 2,
    "name": "比亚迪汉 EV",
    "price": 215800,
    "brand": "比亚迪"
  },
  {
    "id": 3,
    "name": "小鹏 P7",
    "price": 209900,
    "brand": "小鹏"
  },
  {
    "id": 4,
    "name": "大众朗逸",
    "price": 120900,
    "brand": "大众"
  }
]

2. 改造cars.js实现完整功能

以下是原生JavaScript实现的完整代码,包含数据拉取、实时过滤、结果渲染:

// 获取DOM元素
const searchInput = document.getElementById('car-search');
const priceMin = document.getElementById('price-min');
const priceMax = document.getElementById('price-max');
const carList = document.getElementById('car-list');

// 存储原始车辆数据,避免每次过滤重新请求
let allCars = [];

// 从JSON拉取数据
async function loadCars() {
  try {
    const res = await fetch('./cars.json');
    if (!res.ok) throw new Error(`HTTP错误:${res.status}`);
    allCars = await res.json();
    renderCars(allCars); // 初始渲染全部车辆
  } catch (err) {
    carList.innerHTML = `<p class="error">加载失败:${err.message}</p>`;
  }
}

// 渲染车辆列表到页面
function renderCars(cars) {
  if (cars.length === 0) {
    carList.innerHTML = '<p>未找到匹配的车辆</p>';
    return;
  }

  carList.innerHTML = cars.map(car => `
    <div class="card">
      <h3>${car.name}</h3>
      <p>品牌:${car.brand}</p>
      <p class="price">${car.price.toLocaleString()} 元</p>
    </div>
  `).join('');
}

// 核心过滤逻辑
function filterCars() {
  const searchKeyword = searchInput.value.toLowerCase().trim();
  const min = parseInt(priceMin.value) || 0;
  const max = parseInt(priceMax.value) || Infinity;

  const filtered = allCars.filter(car => {
    // 名称模糊匹配
    const nameMatch = car.name.toLowerCase().includes(searchKeyword);
    // 价格区间匹配
    const priceMatch = car.price >= min && car.price <= max;
    return nameMatch && priceMatch;
  });

  renderCars(filtered);
}

// 绑定实时过滤事件
searchInput.addEventListener('input', filterCars);
priceMin.addEventListener('input', filterCars);
priceMax.addEventListener('input', filterCars);

// 页面加载时初始化数据
window.addEventListener('DOMContentLoaded', loadCars);

3. 配套HTML结构示例

如果需要HTML模板,可参考以下结构(和上面JS的ID对应):

<div class="search-bar">
  <input type="text" id="car-search" placeholder="搜索车辆名称">
  <div class="price-range">
    <input type="number" id="price-min" placeholder="最低价格">
    <span>~</span>
    <input type="number" id="price-max" placeholder="最高价格">
  </div>
</div>
<div id="car-list" class="car-grid"></div>

关键细节说明

  • 性能优化:只在页面加载时拉取一次cars.json,后续过滤直接操作内存中的数据
  • 容错处理:对fetch请求失败、价格输入非数字的情况做了兼容
  • 实时响应:监听输入框的input事件,用户输入时立即更新过滤结果
  • 用户体验:无匹配结果时显示提示文本,价格默认设为0和无穷大(即不限制)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:22:57