📜  过滤器 - Javascript (1)

📅  最后修改于: 2023-12-03 15:12:18.908000             🧑  作者: Mango

过滤器 - JavaScript

过滤器是一种处理数据的技术,它可以对数据进行转换、排序、分组、过滤等操作,从而得到我们想要的结果。在 JavaScript 中,我们可以使用自带的数组方法、高阶函数或者第三方库来实现这种功能。

数组方法

JavaScript 中自带了一些数组方法,可以方便地对数据进行操作。以下是一些常见的用法:

  1. filter() 方法:过滤数组中的元素,返回符合条件的元素集合。
const arr = [1, 2, 3, 4, 5];
const newArr = arr.filter(item => item > 3);
console.log(newArr); // [4, 5]
  1. map() 方法:将数组中的元素以一定规则进行转换,返回新的结果集合。
const arr = [1, 2, 3, 4, 5];
const newArr = arr.map(item => item * 2);
console.log(newArr); // [2, 4, 6, 8, 10]
  1. reduce() 方法:对数组中的元素进行归并操作,返回一个最终的值。
const arr = [1, 2, 3, 4, 5];
const sum = arr.reduce((prev, curr) => prev + curr);
console.log(sum); // 15
高阶函数

高阶函数是指可以接受函数作为参数或者返回一个函数作为结果的函数。在 JavaScript 中,高阶函数可以用来实现数据的过滤、排序、分组等操作。以下是一些常见的用法:

  1. filter() 方法:通过传递一个过滤函数来实现数据的过滤。
const arr = [1, 2, 3, 4, 5];
const filter = fn => arr => arr.filter(fn);
const greaterThan3 = filter(item => item > 3);
const newArr = greaterThan3(arr);
console.log(newArr); // [4, 5]
  1. sort() 方法:通过传递一个比较函数来实现数据的排序。
const arr = [{ name: "Jack", age: 23 }, { name: "Mary", age: 21 }, { name: "Tom", age: 25 }];
const sort = fn => arr => arr.sort(fn);
const sortByAge = sort((a, b) => a.age - b.age);
const newArr = sortByAge(arr);
console.log(newArr); // [{ name: "Mary", age: 21 }, { name: "Jack", age: 23 }, { name: "Tom", age: 25 }]
  1. groupBy() 方法:通过传递一个归并函数和一个初始值来实现数据的分组。
const arr = [{ name: "Jack", age: 23 }, { name: "Mary", age: 21 }, { name: "Tom", age: 25 }];
const groupBy = (fn, init) => arr => arr.reduce((acc, item) => {
  const key = fn(item);
  if (!acc[key]) {
    acc[key] = init;
  }
  acc[key] = acc[key].concat(item);
  return acc;
}, {});
const groupByAge = groupBy(item => item.age, []);
const groups = groupByAge(arr);
console.log(groups); // { "21": [{ name: "Mary", age: 21 }], "23": [{ name: "Jack", age: 23 }], "25": [{ name: "Tom", age: 25 }] }
第三方库

除了自带的数组方法和高阶函数以外,我们还可以使用第三方库来实现数据的过滤、排序、分组等操作。以下是一些常见的库:

  1. lodash:一个 JavaScript 工具库,提供了丰富的函数式编程方法。
const _ = require("lodash");
const arr = [{ name: "Jack", age: 23 }, { name: "Mary", age: 21 }, { name: "Tom", age: 25 }];
const newArr = _.filter(arr, item => item.age > 23);
console.log(newArr); // [{ name: "Tom", age: 25 }]
  1. d3:一个专业的数据可视化库,提供了各种数据转换和操作的模块。
const d3 = require("d3-array");
const arr = [{ name: "Jack", age: 23 }, { name: "Mary", age: 21 }, { name: "Tom", age: 25 }];
const newArr = d3.sum(arr, item => item.age);
console.log(newArr); // 69
结语

以上是 JavaScript 中过滤器的介绍,我们可以使用自带的数组方法、高阶函数或者第三方库来实现这种功能。无论哪种方式,都可以方便地对数据进行转换、排序、分组、过滤等操作,让我们的代码更简洁、高效。