当前位置:首页 > 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);
  };
}

筛选与排序结合

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

js实现筛选数据功能

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;
  });
}

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

相关文章

vue实现账号注册功能

vue实现账号注册功能

实现账号注册功能 在Vue中实现账号注册功能通常需要结合前端表单和后端API交互。以下是一个完整的实现方案: 创建注册表单组件 新建一个Register.vue组件,包含基本的注册表单字段: &l…

vue电影功能实现

vue电影功能实现

Vue 电影功能实现 数据获取与展示 使用 Axios 或 Fetch API 从电影 API(如 TMDb、豆瓣 API)获取数据。在 Vue 的 created 或 mounted 生命周期钩子中…

vue 实现筛选功能

vue 实现筛选功能

实现筛选功能的基本思路 在Vue中实现筛选功能通常涉及以下几个核心步骤:数据绑定、筛选逻辑处理、结果展示。以下是具体实现方法。 数据准备与绑定 准备一个包含所有数据的数组,并使用v-model或v-…

vue实现退出功能

vue实现退出功能

Vue 实现退出功能的方法 在 Vue 中实现退出功能通常涉及清除用户登录状态、跳转登录页等操作。以下是几种常见的实现方式: 清除登录状态并跳转 使用 Vue Router 进行页面跳转,同时清除本…

vue 实现数据分页

vue 实现数据分页

实现数据分页的基本思路 在Vue中实现数据分页通常需要结合前端分页逻辑和后端API支持。前端分页适合数据量较小的情况,后端分页适合大数据量场景。 前端分页实现 创建一个计算属性来分割当前页数据:…

vue实现表情功能

vue实现表情功能

实现表情功能的基本思路 在Vue中实现表情功能通常涉及表情选择器的UI组件开发、表情数据的存储与渲染,以及用户输入与表情的交互逻辑。以下是具体实现方法: 表情数据准备 准备一个表情符号的数组或对象,…