当前位置:首页 > JavaScript

js实现筛选数据功能

2026-03-01 19:53:26JavaScript

基本筛选功能实现

使用数组的filter方法可以快速实现基础筛选:

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

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

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

多条件复合筛选

通过组合多个条件实现复杂筛选:

js实现筛选数据功能

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

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

动态关键词搜索

实现不区分大小写的关键词搜索:

function keywordSearch(items, keyword, fields) {
  const lowerKeyword = keyword.toLowerCase();
  return items.filter(item => 
    fields.some(field => 
      String(item[field]).toLowerCase().includes(lowerKeyword)
    )
  );
}

const searched = keywordSearch(data, 'app', ['name', 'category']);

分页筛选实现

结合筛选与分页功能:

js实现筛选数据功能

function paginatedFilter(items, filterFn, page, pageSize) {
  const filtered = filterFn ? items.filter(filterFn) : [...items];
  const total = filtered.length;
  const paginated = filtered.slice((page - 1) * pageSize, page * pageSize);

  return {
    data: paginated,
    total,
    page,
    totalPages: Math.ceil(total / pageSize)
  };
}

const pageResult = paginatedFilter(data, item => item.category === 'fruit', 1, 2);

性能优化建议

对于大型数据集考虑以下优化:

// 使用索引或Map预处理数据
const categoryIndex = data.reduce((acc, item) => {
  if (!acc[item.category]) acc[item.category] = [];
  acc[item.category].push(item);
  return acc;
}, {});

// Web Worker处理超大数据集
const worker = new Worker('filter-worker.js');
worker.postMessage({data, conditions});
worker.onmessage = e => console.log(e.data.result);

筛选器组件示例

实现可复用的筛选组件:

class DataFilter {
  constructor(data) {
    this.originalData = data;
    this.filteredData = [...data];
  }

  applyFilter(filterFn) {
    this.filteredData = this.originalData.filter(filterFn);
    return this;
  }

  reset() {
    this.filteredData = [...this.originalData];
    return this;
  }

  get results() {
    return this.filteredData;
  }
}

const filter = new DataFilter(data);
filter.applyFilter(item => item.id > 1);

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

相关文章

vue实现数据

vue实现数据

Vue 实现数据绑定的方法 Vue.js 提供了多种方式实现数据绑定,包括双向绑定、单向绑定以及动态数据绑定。以下是几种常见的实现方式: 双向数据绑定(v-model) 双向数据绑定通常用于表单元素…

vue实现数据增加

vue实现数据增加

vue实现数据增加的几种方法 在Vue中实现数据增加通常涉及以下几个核心概念和方法: 响应式数据声明 在Vue组件中,使用data选项或ref(Vue 3)声明响应式数据: // Vue…

vue实现考试多选功能

vue实现考试多选功能

Vue实现考试多选功能 数据绑定与选项渲染 使用v-model绑定用户选择的答案数组,结合v-for循环渲染选项列表。示例代码: <template> <div>…

vue功能实现

vue功能实现

Vue 功能实现指南 Vue.js 是一个流行的前端框架,用于构建用户界面和单页应用。以下是 Vue 功能实现的关键方法和技术。 数据绑定与响应式 Vue 的核心特性是数据绑定和响应式系统。通过 d…

vue数据劫持实现

vue数据劫持实现

Vue 数据劫持实现原理 Vue 的数据劫持主要通过 Object.defineProperty 或 Proxy 实现,用于监听对象属性的变化并触发更新。以下是核心实现方式: 基于 Object.d…

vue实现轨道功能

vue实现轨道功能

Vue 实现轨道功能的方法 轨道功能通常指在界面中实现元素沿特定路径移动的效果,例如进度条、时间轴或动画轨迹。以下是几种常见的实现方式: 使用 CSS 动画与 Vue 结合 通过 Vue 动态绑定样…