hand
_1_11_294
4
返回栏目
0k
2k
1k
2k
1k
1k
1k
2k
2k
2k
1k
2k
1k
2k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
2k
1k
1k
2k
2k
2k
3k
3k
2k
3k
2k
3k
3k
3k
1k
2k
3k
2k
2k
3k
3k
2k
2k
6k
3k
2k
2k
5k
3k
4k
3k
3k
2k
4k
3k
3k
2k
3k
3k
1k
4k
4k
4k
2k
5k
3k
2k
3k
4k
3k
3k
4k
2k
3k
3k
4k
2k
2k
3k
4k
3k
3k
2k
5k
2k
3k
3k
3k
3k
2k
3k
3k
3k
2k
2k
2k
2k
3k
2k
2k
2k
3k
2k
2k
2k
2k
2k
2k
0.1k
0.2k
3k
2k
3k
2k
0.1k
2k
2k
4k
2k
2k
1k
2k
2k
3k
3k
3k
3k
2k
2k
3k
3k
3k
4k
3k
3k
4k
3k
2k
2k
3k
3k
3k
3k
3k
3k
2k
3k
3k
4k
4k
3k
3k
2k
2k
3k
2k
2k
1k
2k
3k
1k
2k
2k
2k
2k
2k
2k
2k
2k
2k
4k
2k
3k
2k
1k
2k
2k
2k
2k
2k
3k
2k
3k
1k
2k
2k
2k
0k
2k
2k
2k
2k
2k
2k
2k
3k
2k
2k
1k
1k
3k
2k
3k
1k
2k
1k
2k
2k
2k
2k
3k
1k
3k
2k
2k
2k
2k
2k
2k
1k
2k
2k
4k
3k
3k
2k
2k
2k
2k
2k
2k
4k
3k
3k
3k
2k
2k
2k
2k
2k
2k
3k
4k
返回前端 - Javascript栏目
作者:
贺及楼
成为作者
更新日期:2025-02-21 21:22:59
在前端开发中,JavaScript 提供了丰富的工具来处理集合(如数组和对象)。集合过滤是一项常见且重要的操作,它允许我们根据特定条件从集合中提取所需的元素。本文将详细介绍 JavaScript 中集合过滤的方法、技巧以及新特性。
for
循环for
循环是最基础的过滤集合的方式。通过遍历集合中的每个元素,根据条件判断是否将其添加到新的集合中。
const numbers = [1, 2, 3, 4, 5, 6];
const evenNumbers = [];
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] % 2 === 0) {
evenNumbers.push(numbers[i]);
}
}
console.log(evenNumbers); // [2, 4, 6]
这种方法的优点是简单直接,适用于所有情况。但缺点是代码量较多,不够简洁。
filter()
方法filter()
是数组的一个高阶函数,它接受一个回调函数作为参数,回调函数返回 true
或 false
来决定元素是否保留在新数组中。
const numbers = [1, 2, 3, 4, 5, 6];
const evenNumbers = numbers.filter(function (number) {
return number % 2 === 0;
});
console.log(evenNumbers); // [2, 4, 6]
使用箭头函数可以使代码更加简洁:
const numbers = [1, 2, 3, 4, 5, 6];
const evenNumbers = numbers.filter(number => number % 2 === 0);
console.log(evenNumbers); // [2, 4, 6]
filter()
方法的优点是代码简洁,可读性高,并且可以链式调用其他数组方法。
当处理对象数组时,我们可以根据对象的属性进行过滤。
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 22 }
];
const adults = users.filter(user => user.age >= 25);
console.log(adults);
// [
// { name: 'Alice', age: 25 },
// { name: 'Bob', age: 30 }
// ]
flatMap()
与过滤结合flatMap()
方法先对数组中的每个元素执行映射操作,然后将结果扁平化。结合过滤操作,可以实现更复杂的集合处理。
const nestedNumbers = [[1, 2], [3, 4], [5, 6]];
const evenNumbers = nestedNumbers.flatMap(subArray => subArray.filter(num => num % 2 === 0));
console.log(evenNumbers); // [2, 4, 6]
Array.from()
与过滤Array.from()
可以从类数组对象或可迭代对象创建一个新的数组实例。结合过滤条件,可以创建满足特定条件的新数组。
const range = Array.from({ length: 10 }, (_, i) => i + 1);
const oddNumbers = Array.from(range.filter(num => num % 2!== 0));
console.log(oddNumbers); // [1, 3, 5, 7, 9]
Set
和 Map
的过滤ES6 引入了 Set
和 Map
数据结构,它们也可以进行过滤操作。
Set
的过滤
const set = new Set([1, 2, 3, 4, 5]);
const filteredSet = new Set([...set].filter(num => num > 3));
console.log(filteredSet); // Set { 4, 5 }
Map
的过滤
const map = new Map([
['apple', 1],
['banana', 2],
['cherry', 3]
]);
const filteredMap = new Map([...map].filter(([key, value]) => value > 1));
console.log(filteredMap); // Map { 'banana' => 2, 'cherry' => 3 }
方法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
for 循环 |
所有情况,尤其是需要精确控制循环过程 | 简单直接,适用于所有 JavaScript 环境 | 代码量多,不够简洁 |
filter() |
数组过滤 | 代码简洁,可读性高,可链式调用 | 仅适用于数组 |
flatMap() 结合过滤 |
嵌套数组的处理和过滤 | 可以同时完成映射和扁平化操作 | 相对复杂,需要理解映射和扁平化的概念 |
Array.from() 结合过滤 |
从类数组或可迭代对象创建过滤后的数组 | 灵活创建满足条件的数组 | 对于简单数组过滤略显繁琐 |
Set 和 Map 的过滤 |
Set 和 Map 数据结构的过滤 |
适用于特定的数据结构 | 需要了解 Set 和 Map 的特性 |
通过掌握这些集合过滤方法和新特性,我们可以更高效地处理前端开发中的各种集合数据,提高代码的质量和可读性。无论是简单的数组过滤还是复杂的对象集合处理,JavaScript 都提供了丰富的工具来满足我们的需求。
前端 - Javascript
整章节共299节
快分享给你的小伙伴吧 ~