JavaScript数组的filter()

原文:Array filter() in JavaScript

JavaScript的数组函数filter()可以筛选出符合指定条件的数组元素,本文简述该函数的使用。

Array#filter()函数接收一个callback回调函数,返回一个新的数组,其中的元素在callback函数中返回值为真值。

1
2
3
4
5
6
7
8
9
const numbers = [1, 2, 3, 4, 5, 6];

let callback = v => v % 2 === 0;
const even = numbers.filter(callback);
even; // [2, 4, 6]

callback = v => v % 2 === 1;
const odd = numbers.filter(callback);
odd; // [1, 3, 5]

注意:filter()返回的是新数组,它不会修改原数组。

1
2
3
4
5
even === numbers; // false
odd === numbers; // false
even === odd; // false

numbers.length; // 6, `filter()` does not modify `numbers`

filter()有点像浅拷贝:它只是克隆了顶层的数组,而嵌套的对象不会改变。

1
2
3
4
5
6
7
8
9
10
11
12
13
const people = [
{ name: 'Jean-Luc Picard', rank: 'Captain' },
{ name: 'Will Riker', rank: 'Commander' },
{ name: 'Geordi La Forge', rank: 'Lieutenant' }
];

const filtered = people.filter(p => p.rank === 'Lieutenant');

// 虽然`filtered`是一个新数组,但其中的元素仍然指向与原数组相同的对象
// 因此修改`filtered`中的对象,会影响原数组
filtered[0] === people[2]; // true
filtered[0].rank = 'Lieutenant Commander';
people[2].rank; // 'Lieutenant Commander'