JavaScript Array filter()

filter() 方法返回一个新数组,其中包含所有通过给定函数测试的元素。

示例

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

// function to check even numbers
function checkEven(number) {
  if (number % 2 == 0)
    return true;
  else
    return false;
}

// create a new array by filter even numbers from the numbers array let evenNumbers = numbers.filter(checkEven);
console.log(evenNumbers); // Output: [ 2, 4, 6, 8, 10 ]

filter() 语法

filter() 方法的语法是

arr.filter(callback(element), thisArg)

这里,arr 是一个数组。


filter() 参数

filter() 方法接受

  • callback - 对每个数组元素执行的测试函数;如果元素通过测试,则返回 true,否则返回 false。它接受
    • element - 从数组传递的当前元素。
  • thisArg(可选)- 执行 callback 时用作 this 的值。默认值为 undefined

filter() 返回值

  • 返回一个仅包含通过测试的元素的新数组。

注意事项:

  • filter() 不会更改原始数组。
  • filter() 不会为没有值的数组元素执行 callback

示例 1:过滤数组中的值

const prices = [1800, 2000, null, 3000, 5000, "Thousand", 500, 8000]

function checkPrice(element) {
  return element > 2000 && !Number.isNaN(element);
}

let filteredPrices = prices.filter(checkPrice);
console.log(filteredPrices); // [ 3000, 5000, 8000 ] // using arrow function
let newPrices = prices.filter((price) => (price > 2000 && !Number.isNaN(price)));
console.log(newPrices); // [ 3000, 5000, 8000 ]

输出

[ 3000, 5000, 8000 ]
[ 3000, 5000, 8000 ]

在这里,所有小于或等于 2000 的数字以及所有非数字值都被过滤掉了。


示例 2:在数组中搜索

const languages = ["JavaScript", "Python", "Ruby", "C", "C++", "Swift", "PHP", "Java"];

function searchFor(arr, query) {
    function condition(element) {
        return element.toLowerCase().indexOf(query.toLowerCase()) !== -1;
    }
return arr.filter(condition);
} let newArr = searchFor(languages, "ja"); console.log(newArr); // [ 'JavaScript', 'Java' ]
// using arrow function const searchArr = (arr, query) => arr.filter(element => element.toLowerCase().indexOf(query.toLowerCase()) !== -1);
let newLanguages = searchArr(languages, "p"); console.log(newLanguages); // [ 'JavaScript', 'Python', 'PHP' ]

输出

[ 'JavaScript', 'Java' ]
[ 'JavaScript', 'Python', 'PHP' ]

在这里,elementquery 都转换为小写,并使用 indexOf() 方法检查 query 是否存在于 element 中。

未通过此测试的元素将被过滤掉。


推荐阅读: JavaScript Array map()

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战