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

多条件筛选实现

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

js实现筛选数据功能

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

复杂条件筛选

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

js实现筛选数据功能

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

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

相关文章

vue 实现筛选功能

vue 实现筛选功能

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

vue实现复选功能

vue实现复选功能

Vue 实现复选功能 基础实现 使用 v-model 绑定到数组实现多选功能。当复选框被选中时,其 value 会被添加到数组中;取消选中时,会从数组中移除。 <template>…

vue实现模态功能

vue实现模态功能

Vue 实现模态框功能 方法一:使用组件和v-if/v-show控制显示 创建独立的模态框组件(如Modal.vue),通过props接收标题、内容等数据,使用v-if或v-show控制显示状态。…

vue实现插件功能

vue实现插件功能

Vue 插件实现方法 安装与注册插件 在 Vue 项目中,插件通常以独立模块形式存在。通过 Vue.use() 方法注册插件,该方法会自动调用插件的 install 函数。 // 引入插件 imp…

react如何接收数据

react如何接收数据

React 接收数据的方法 React 中接收数据的方式有多种,根据数据来源和场景的不同,可以选择适合的方法。以下是常见的几种方式: Props 传递数据 父组件通过 props 向子组件传递数据,…

js实现复制功能实现

js实现复制功能实现

使用document.execCommand方法(传统方式,已逐渐被弃用) 传统方式通过document.execCommand('copy')实现复制功能,需先选中文本。以下是一个完整示例: fu…