es6 过滤
在 ES6 中,我们可以使用多种方法来对数组进行过滤。最常见的解决方案是利用 Array.prototype.filter()
方法。该方法会创建一个新数组,其中包含所有通过测试的元素。接下来,我们将如何使用 filter
方法,并提供几种不同的实现思路。
基本用法:使用 filter 方法
假设我们有一个数字数组,需要过滤出所有大于 5 的数字:
javascript
const numbers = [1, 5, 8, 9, 3, 6];</p>
<p>const filteredNumbers = numbers.filter(number => number > 5);</p>
<p>console.log(filteredNumbers); // 输出: [8, 9, 6]
在这里,filter
方法接收一个回调函数作为参数,这个回调函数会对数组中的每个元素执行一次。只有当回调函数返回 true
时,当前元素才会被包含在结果数组中。
使用箭头函数与复杂条件
当我们需要根据更复杂的条件来过滤数组时,可以编写更复杂的箭头函数。例如,假设我们有一个对象数组,表示一组用户,我们需要筛选出年龄大于 18 岁的用户:
javascript
const users = [
{ name: 'Alice', age: 17 },
{ name: 'Bob', age: 20 },
{ name: 'Charlie', age: 16 }
];</p>
<p>const adults = users.filter(user => user.age > 18);</p>
<p>console.log(adults);
// 输出: [{ name: 'Bob', age: 20 }]
在这个例子中,我们使用了箭头函数结合对象属性访问来实现过滤。
使用 for 循环手动实现过滤
除了使用内置的 filter
方法外,我们还可以通过传统的 for
循环手动实现过滤功能。这种方法虽然不那么简洁,但在某些情况下可能会更有控制力:
javascript
const numbers = [1, 5, 8, 9, 3, 6];
const filteredNumbers = [];</p>
<p>for (let i = 0; i < numbers.length; i++) {
if (numbers[i] > 5) {
filteredNumbers.push(numbers[i]);
}
}</p>
<p>console.log(filteredNumbers); // 输出: [8, 9, 6]
这种方式的优点是我们可以完全控制循环过程,并且可以在过滤的同时执行其他操作。
使用 reduce 实现过滤
reduce
方法也可以用来实现过滤功能。尽管这不是它的主要用途,但有时这种技巧可能非常有用:
javascript
const numbers = [1, 5, 8, 9, 3, 6];</p>
<p>const filteredNumbers = numbers.reduce((acc, current) => {
if (current > 5) {
acc.push(current);
}
return acc;
}, []);</p>
<p>console.log(filteredNumbers); // 输出: [8, 9, 6]
在这里,reduce
方法累积了一个新的数组,只包含满足条件的元素。
通过以上几种方式,我们可以灵活地根据需求选择最适合的过滤方法。无论是使用 filter
方法、传统 for
循环还是 reduce
方法,都可以有效地完成数组过滤任务。