当前位置:首页 > 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 提供了多种数据渲染的方式,包括插值表达式、指令和计算属性等。以下是常见的实现方法: 插值表达式 使用双大括号 {{ }} 将数据绑定到模板中,数据变化时会…

vue数据代理底层实现

vue数据代理底层实现

Vue 数据代理的底层实现原理 Vue 的数据代理是通过 Object.defineProperty 或 Proxy(Vue 3)实现的,将数据对象的属性代理到 Vue 实例上,使得可以直接通过 th…

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT P…

vue实现数据拖动

vue实现数据拖动

Vue 实现数据拖动 使用 HTML5 拖放 API HTML5 提供了原生的拖放 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 drop 事件…

vue怎么实现功能

vue怎么实现功能

Vue 是一个渐进式 JavaScript 框架,常用于构建用户界面。以下是一些常见的功能实现方法: 数据绑定 Vue 通过 v-model 实现双向数据绑定,适用于表单输入等场景: <te…

h5实现手机摇一摇功能

h5实现手机摇一摇功能

实现原理 手机摇一摇功能基于设备加速度传感器(DeviceMotionEvent),通过监听设备的加速度变化来判断用户是否进行了摇晃动作。HTML5提供了相关API获取设备传感器数据。 基本实现步…