跳转到主要内容
模块 6 · 第 1 课(共 4)课程中的21/32~10 min
模块课程(1/4)

地图和过滤器

两个基本方法:它们将数组转换为新数组,而不改变原始数组。

map:转换每个元素

它接受一个函数,将其应用于每个元素,并返回一个相同长度的数组 与结果。

JS
const numeri = [1, 2, 3, 4];

const doppi = numeri.map((n) => n * 2);
// [2, 4, 6, 8]

const stringhe = numeri.map((n) => `n=${n}`);
// ['n=1', 'n=2', 'n=3', 'n=4']

原来的保持不变:

JS
numeri; // [1, 2, 3, 4]  ← unchanged

filter:选择一个子集

它需要一个谓词(返回 true/false 的函数)。它只保留以下元素 谓词为真。

JS
const numeri = [1, 2, 3, 4, 5, 6];

const pari = numeri.filter((n) => n % 2 === 0);
// [2, 4, 6]

const grandi = numeri.filter((n) => n > 3);
// [4, 5, 6]

结合两者

经典管道:过滤,然后转换。

JS
const prezzi = [12, 5, 100, 30, 7];

const grandiDoppi = prezzi.filter((p) => p > 10).map((p) => p * 2);
// [24, 200, 60]

尝试一下

锻炼#js.m6.l1.e1
尝试:0加载中...

定义“vat(prices, rates)”:给定一个数字数组和一个费率(例如 0.22),返回一个包含增值税增加的价格的数组。使用地图。

正在加载编辑器...
显示提示

价格.map((p) => p * (1 + 利率))

3 次尝试后可用的解决方案

复习练习

锻炼#js.m6.l1.e2
尝试:0加载中...

定义`adultNames(people)`:您接收一个对象数组{name,age}并返回年龄>=18的人的姓名数组。使用filter+map。

正在加载编辑器...
显示提示

链:.filter(...).map((p) => p.name)

3 次尝试后可用的解决方案