当前位置:首页 > JavaScript

js实现多条件筛选数据

2026-03-01 20:47:12JavaScript

使用 Array.filter() 方法实现多条件筛选

通过 Array.filter() 方法可以轻松实现多条件筛选。该方法会创建一个新数组,其中包含通过所提供函数测试的所有元素。

const data = [
  { name: 'Apple', category: 'fruit', price: 1.2, stock: 100 },
  { name: 'Banana', category: 'fruit', price: 0.8, stock: 50 },
  { name: 'Carrot', category: 'vegetable', price: 0.5, stock: 200 }
];

const filters = {
  category: 'fruit',
  price: (value) => value < 1,
  stock: (value) => value > 30
};

const filteredData = data.filter(item => {
  return Object.entries(filters).every(([key, condition]) => {
    if (typeof condition === 'function') {
      return condition(item[key]);
    }
    return item[key] === condition;
  });
});

使用动态构建筛选函数

对于更复杂的筛选需求,可以动态构建筛选函数,使代码更具灵活性。

js实现多条件筛选数据

function createFilterFunction(filters) {
  return function(item) {
    for (const [key, condition] of Object.entries(filters)) {
      if (condition === null || condition === undefined) continue;

      if (typeof condition === 'function') {
        if (!condition(item[key])) return false;
      } else if (Array.isArray(condition)) {
        if (!condition.includes(item[key])) return false;
      } else {
        if (item[key] !== condition) return false;
      }
    }
    return true;
  };
}

const complexFilters = {
  category: ['fruit', 'vegetable'],
  price: value => value < 1.5,
  stock: value => value > 40
};

const filterFn = createFilterFunction(complexFilters);
const result = data.filter(filterFn);

使用第三方库实现高级筛选

对于大型项目,可以考虑使用 lodash 等工具库提供的筛选功能,它们通常性能更好且功能更全面。

js实现多条件筛选数据

import _ from 'lodash';

const filtered = _.filter(data, {
  category: 'fruit',
  price: value => value < 1
});

// 或者使用 _.conforms 实现更灵活的筛选
const conformsFilter = _.conforms({
  category: val => val === 'fruit',
  price: val => val < 1,
  stock: val => val > 50
});

const conformsResult = _.filter(data, conformsFilter);

处理异步数据筛选

当需要从API获取数据后进行筛选时,可以结合Promise和filter方法。

async function fetchAndFilter(url, filters) {
  const response = await fetch(url);
  const data = await response.json();

  return data.filter(item => {
    return Object.entries(filters).every(([key, condition]) => {
      if (typeof condition === 'function') {
        return condition(item[key]);
      }
      return item[key] === condition;
    });
  });
}

// 使用示例
fetchAndFilter('/api/products', { category: 'fruit' })
  .then(filteredProducts => {
    console.log(filteredProducts);
  });

性能优化建议

对于大数据集,应考虑以下优化策略:

  • 使用Web Worker在后台线程中进行筛选
  • 实现防抖机制避免频繁筛选
  • 对数据进行索引或预处理
  • 使用虚拟滚动等技术只渲染可见项
// 简单防抖实现示例
function debounceFilter(data, filters, delay = 300) {
  let timer;
  return function() {
    clearTimeout(timer);
    timer = setTimeout(() => {
      const result = data.filter(/* 筛选逻辑 */);
      // 处理结果
    }, delay);
  };
}

这些方法提供了从简单到复杂的多条件筛选实现方案,可以根据具体项目需求选择合适的方式。

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

相关文章

vue实现表格读取数据

vue实现表格读取数据

Vue 实现表格数据读取 在 Vue 中实现表格数据读取通常涉及以下关键步骤: 数据绑定与表格渲染 通过 v-for 指令动态渲染表格行,数据通常存储在组件的 data 或 Vuex 状态中:…

Vue实现数据检验

Vue实现数据检验

Vue 数据校验的实现方法 在Vue中实现数据校验可以通过多种方式完成,以下是常见的几种方法: 使用Vue的内置指令 Vue提供了一些内置指令如v-model和v-bind可以结合HTML5的表单验…

vue实现数据拖动

vue实现数据拖动

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

vue实现数据添加

vue实现数据添加

在 Vue 中实现数据添加 Vue 提供了多种方式来实现数据的添加操作,可以通过组件的数据绑定、表单处理以及状态管理等方式完成。以下是几种常见的实现方法: 使用 v-model 绑定表单数据 通过…

vue实现数据太多

vue实现数据太多

处理 Vue 中大数据量的优化方案 虚拟滚动(Virtual Scrolling) 使用 vue-virtual-scroller 或 vxe-table 等库实现虚拟滚动,仅渲染可视区域内的 DOM…

vue如何实现数据

vue如何实现数据

Vue 数据实现方式 Vue 提供了多种方式实现数据管理和响应式更新,核心机制基于响应式系统和状态管理方案。 响应式数据声明 在组件选项中使用 data 函数返回对象,Vue 会自动递归转换属性为响…