📅  最后修改于: 2023-12-03 15:12:18.908000             🧑  作者: Mango
过滤器是一种处理数据的技术,它可以对数据进行转换、排序、分组、过滤等操作,从而得到我们想要的结果。在 JavaScript 中,我们可以使用自带的数组方法、高阶函数或者第三方库来实现这种功能。
JavaScript 中自带了一些数组方法,可以方便地对数据进行操作。以下是一些常见的用法:
const arr = [1, 2, 3, 4, 5];
const newArr = arr.filter(item => item > 3);
console.log(newArr); // [4, 5]
const arr = [1, 2, 3, 4, 5];
const newArr = arr.map(item => item * 2);
console.log(newArr); // [2, 4, 6, 8, 10]
const arr = [1, 2, 3, 4, 5];
const sum = arr.reduce((prev, curr) => prev + curr);
console.log(sum); // 15
高阶函数是指可以接受函数作为参数或者返回一个函数作为结果的函数。在 JavaScript 中,高阶函数可以用来实现数据的过滤、排序、分组等操作。以下是一些常见的用法:
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]
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 }]
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 }] }
除了自带的数组方法和高阶函数以外,我们还可以使用第三方库来实现数据的过滤、排序、分组等操作。以下是一些常见的库:
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 }]
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 中过滤器的介绍,我们可以使用自带的数组方法、高阶函数或者第三方库来实现这种功能。无论哪种方式,都可以方便地对数据进行转换、排序、分组、过滤等操作,让我们的代码更简洁、高效。