当前位置:首页 > JavaScript

js实现多条件筛选数据

2026-04-04 21:34:25JavaScript

多条件筛选数据的实现方法

使用 Array.filter() 方法

通过 Array.filter() 结合多个条件进行筛选。每个条件可以独立判断,最终合并为完整的筛选逻辑。

const data = [
  { name: 'Alice', age: 25, city: 'New York' },
  { name: 'Bob', age: 30, city: 'Los Angeles' },
  { name: 'Charlie', age: 28, city: 'New York' }
];

function filterData(data, filters) {
  return data.filter(item => {
    return Object.keys(filters).every(key => {
      if (filters[key] === '') return true; // 忽略空条件
      return item[key] === filters[key];
    });
  });
}

const filters = { city: 'New York', age: 25 };
const result = filterData(data, filters);
console.log(result); // 输出: [{ name: 'Alice', age: 25, city: 'New York' }]

动态构建筛选条件

允许条件动态增减,支持部分匹配或范围查询。

js实现多条件筛选数据

function dynamicFilter(data, conditions) {
  return data.filter(item => {
    return conditions.every(condition => {
      const { key, value, operator = '===' } = condition;
      switch (operator) {
        case '===': return item[key] === value;
        case '>': return item[key] > value;
        case '<': return item[key] < value;
        case 'includes': return String(item[key]).includes(value);
        default: return true;
      }
    });
  });
}

const conditions = [
  { key: 'city', value: 'New York' },
  { key: 'age', value: 26, operator: '<' }
];
const result = dynamicFilter(data, conditions);
console.log(result); // 输出: [{ name: 'Charlie', age: 28, city: 'New York' }]

使用高阶函数封装

将筛选逻辑抽象为高阶函数,支持更复杂的组合条件。

js实现多条件筛选数据

const and = (...fns) => item => fns.every(fn => fn(item));
const or = (...fns) => item => fns.some(fn => fn(item));

const filterByCity = city => item => item.city === city;
const filterByAge = age => item => item.age > age;

const combinedFilter = and(
  filterByCity('New York'),
  or(filterByAge(24), filterByAge(27))
);

const result = data.filter(combinedFilter);
console.log(result); // 输出符合条件的项

支持模糊搜索

通过正则表达式或字符串匹配实现模糊筛选。

function fuzzyFilter(data, keyword) {
  const regex = new RegExp(keyword, 'i');
  return data.filter(item => {
    return Object.values(item).some(value => 
      String(value).match(regex)
    );
  });
}

const result = fuzzyFilter(data, 'al');
console.log(result); // 输出包含 'al' 的项

性能优化

对于大数据量,可以使用索引或 Web Worker 分片处理。

// 使用索引优化
const index = {};
data.forEach((item, idx) => {
  Object.keys(item).forEach(key => {
    if (!index[key]) index[key] = {};
    const value = item[key];
    if (!index[key][value]) index[key][value] = [];
    index[key][value].push(idx);
  });
});

function indexedFilter(filters) {
  const matchedIndices = Object.keys(filters).map(key => {
    const value = filters[key];
    return index[key][value] || [];
  });
  const commonIndices = matchedIndices.reduce((a, b) => 
    a.filter(x => b.includes(x))
  );
  return commonIndices.map(idx => data[idx]);
}

以上方法覆盖了从基础到高级的多条件筛选需求,可根据实际场景选择或组合使用。

标签: 多条数据
分享给朋友:

相关文章

vue双向实现数据

vue双向实现数据

Vue 双向数据绑定的实现 Vue 的双向数据绑定主要通过 v-model 指令实现,它结合了 v-bind 和 v-on 的功能,能够同步表单输入和应用状态。 基本语法 在表单元素上使用 v-mo…

uniapp 广播数据

uniapp 广播数据

使用全局事件总线进行广播 在uniapp中,可以通过全局事件总线(EventBus)实现数据的广播和监听。创建一个全局的EventBus实例,在需要的地方触发事件和监听事件。 // 在main.js…

vue实现数据动态

vue实现数据动态

Vue 实现数据动态绑定的方法 Vue.js 的核心特性之一是数据绑定,通过响应式系统实现数据的动态更新。以下是几种常见的实现方式: 双向数据绑定(v-model) 使用 v-model 指令可以实…

Vue数据绑定实现

Vue数据绑定实现

Vue 数据绑定的核心机制 Vue 的数据绑定基于响应式系统,通过 Object.defineProperty 或 Proxy 实现。当数据变化时,视图自动更新。 双向绑定的实现方式 v-model…

vue实现数据过滤

vue实现数据过滤

Vue 数据过滤的实现方法 在 Vue 中实现数据过滤可以通过多种方式,以下是几种常见的实现方法: 使用计算属性(Computed Properties) 计算属性是 Vue 中最常用的数据过滤方式…

vue 实现数据添加

vue 实现数据添加

Vue 数据添加的实现方法 在 Vue 中实现数据添加通常涉及表单绑定、事件处理和状态管理。以下是几种常见场景的实现方式: 表单绑定与提交 通过 v-model 实现表单数据双向绑定,使用 @sub…