当前位置:首页 > JavaScript

js实现筛选数据功能

2026-01-31 04:44:36JavaScript

实现基础筛选功能

通过数组的 filter 方法可以快速实现数据筛选:

const data = [
  { id: 1, name: 'Apple', category: 'fruit' },
  { id: 2, name: 'Carrot', category: 'vegetable' }
];

function filterByCategory(items, category) {
  return items.filter(item => item.category === category);
}

const fruits = filterByCategory(data, 'fruit');

多条件筛选实现

使用逻辑运算符组合多个筛选条件:

function multiFilter(items, filters) {
  return items.filter(item => {
    return Object.keys(filters).every(key => {
      if (typeof filters[key] === 'function') {
        return filters[key](item[key]);
      }
      return item[key] === filters[key];
    });
  });
}

const result = multiFilter(data, {
  category: 'fruit',
  name: name => name.startsWith('A')
});

动态搜索筛选

结合输入框实现实时搜索功能:

const searchInput = document.getElementById('search');
const dataDisplay = document.getElementById('results');

searchInput.addEventListener('input', (e) => {
  const searchTerm = e.target.value.toLowerCase();
  const filtered = data.filter(item => 
    item.name.toLowerCase().includes(searchTerm)
  );
  renderResults(filtered);
});

function renderResults(items) {
  dataDisplay.innerHTML = items.map(item => 
    `<div>${item.name}</div>`
  ).join('');
}

复杂条件筛选

处理更复杂的筛选逻辑时可考虑使用高阶函数:

function createFilterPredicate(filters) {
  return item => {
    for (const [key, condition] of Object.entries(filters)) {
      if (typeof condition === 'function' && !condition(item[key])) {
        return false;
      }
      if (typeof condition !== 'function' && item[key] !== condition) {
        return false;
      }
    }
    return true;
  };
}

const complexFilter = createFilterPredicate({
  category: val => ['fruit', 'vegetable'].includes(val),
  id: id => id > 0
});
const filteredData = data.filter(complexFilter);

性能优化方案

对于大数据集考虑使用以下优化手段:

// 使用Web Worker处理大数据
const worker = new Worker('filter-worker.js');
worker.postMessage({ data, filters });
worker.onmessage = e => updateUI(e.data);

// 使用防抖减少频繁过滤
function debounceFilter() {
  let timeout;
  return function() {
    clearTimeout(timeout);
    timeout = setTimeout(() => {
      const filtered = heavyFilterOperation();
      updateResults(filtered);
    }, 300);
  };
}

筛选与排序结合

筛选后常需要配合排序功能:

function filterAndSort(data, filters, sortKey, direction = 'asc') {
  const filtered = data.filter(createFilterPredicate(filters));
  return filtered.sort((a, b) => {
    if (direction === 'asc') return a[sortKey] > b[sortKey] ? 1 : -1;
    return a[sortKey] < b[sortKey] ? 1 : -1;
  });
}

js实现筛选数据功能

标签: 功能数据
分享给朋友:

相关文章

vue双向实现数据

vue双向实现数据

Vue 双向数据绑定的实现原理 Vue 的双向数据绑定主要通过 v-model 指令实现,其核心是结合了数据劫持(Object.defineProperty 或 Proxy)和发布-订阅模式。以下是具…

vue实现桌面功能

vue实现桌面功能

Vue 实现桌面功能的方法 Vue.js 可以通过结合 Electron 或 NW.js 等框架实现桌面应用开发。以下是几种常见的方法: 使用 Vue 与 Electron 结合 Electron…

vue实现表格读取数据

vue实现表格读取数据

Vue 实现表格数据读取 在 Vue 中实现表格数据读取通常涉及以下关键步骤: 数据绑定与表格渲染 通过 v-for 指令动态渲染表格行,数据通常存储在组件的 data 或 Vuex 状态中:…

前端vue登录功能实现

前端vue登录功能实现

登录功能实现步骤 在Vue中实现登录功能通常需要结合后端API,以下是关键步骤和代码示例: 创建登录表单组件 <template> <div> <form…

vue实现产品使用功能

vue实现产品使用功能

Vue 实现产品功能的关键方法 组件化开发 使用Vue的单文件组件(.vue)将产品功能模块化,每个功能拆分为独立组件。例如产品列表、详情页、购物车等可分别封装为ProductList.vue、Pro…

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaS…