javascript 高阶数组函数 map,filter,reduce

What-is-map-and-filter-in-JavaScript.png

map

假设我们有一个数组arrOne,其中存储了一些数字,并且我们想对每个数字执行一些计算。但是我们也不想弄乱原始数组。

这个时候我们就可以使用map函数来帮助我们实现。

let arrOne = [32, 45, 63, 36, 24, 11]
arrOne.map(value/element, index, array)

假设我们想在不更改原始数组的情况下将每个元素乘以 5。

这是执行此操作的代码:

let arrOne = [32, 45, 63, 36, 24, 11]
const multFive = (num) => {
    return num * 5; //'num' here, is the value of the array.
}
let arrTwo = arrOne.map(multFive)
console.log(arrTwo)

这是输出:

[ 160, 225, 315, 180, 120, 55 ]

那么这里发生了什么?好吧,我有一个arrOne包含 6 个元素的数组。multFive接下来,我用“num”作为参数初始化了一个箭头函数。这将返回num和 5 的乘积,其中“num”变量由 map() 方法提供数据。

如果您不熟悉箭头函数但熟悉常规函数,箭头函数与此相同:

function(num) {  
        return num * 5;
}

然后,我初始化了另一个变量arrTwo,该变量将存储 map() 方法创建的新数组中。

在“arrOne”数组上调用了 map() 方法。因此,map() 方法将从 index[0] 开始选择该数组的每个值,并对每个值执行所需的计算。然后它将使用计算值形成一个新数组。

重要提示:请注意我是如何强调不更改原始数组的。那是因为这个属性使 map() 方法与 'forEach()' 方法不同。map() 方法创建一个新数组,而“forEach()”方法用计算出的数组改变/更改原始数组。

filter

我们可以使用此方法根据提供的条件过滤数组。filter() 方法还会创建一个新数组。

举个例子:假设你有一个数组arrName并且这个数组存储了一堆数字。现在,我们想看看哪些数字可以被3整除, 并从中创建一个单独的数组。

这是执行此操作的代码:

let arrNum = [15, 39, 20, 32, 30, 45, 22]
function divByFive(num) {
  return num % 3 == 0
}
let arrNewNum = arrNum.filter(divByFive)
console.log(arrNewNum)

这是输出:

[ 15, 39, 30, 45 ]

让我们分解这段代码。arrNum一个包含 7 个元素的数组。divByFive用“num”作为参数初始化了一个函数。每次为比较传递一个新的 num 时,它都会返回 true 或 false,其中 'num' 变量由 filter() 方法提供数据。

然后,我初始化了另一个变量arrNewNum,它将存储 filter() 方法将创建的新数组。

调用了arrNum数组的 filter() 方法。因此,filter() 方法将从 index[0] 开始选择该数组的每个值并对每个值执行操作。然后它将使用计算值形成一个新数组。

reduce

假设我们想要求数组中所有元素的总和。现在,您可以使用 for 循环或 forEach() 方法,但 reduce 是专门为此类任务构建的。

reduce()方法通过对元素共同执行所需的操作,将数组简化为单个值。

让我们以上面的例子为例并对其使用reduce:

let arrNum = [15, 39, 20, 32, 30, 45, 22]
function sumOfEle(num, ind) {
  return num + ind;
}
let arrNum2 = arrNum.reduce(sumOfEle)
console.log(arrNum2)

这是输出:

203

一切都与 map() 和 filter() 方法相同——但重要的是要了解 reduce 方法是如何工作的。

reduce() 方法没有明确的语法。让我们看看最简单的一个,它将为您提供使用 reduce() 的所有方法的要点。

下面是一些示例语法reduce()

//Taking the above array for an example
let arrNum = [15, 39, 20, 32, 30, 45, 22]

arr.reduce((a1, a2) => { 
 return a1 + a2
})

看看这个语法。在这里,reduce 采用两个参数,a1并且a2,其中a1充当累加器,而a2具有索引值。

现在,在第一次运行时,累加器等于零并a2保存数组的第一个元素。reduce 所做的是将 a2 保存的累加器中的值抛出并将其递增到下一个。之后,reduce() 方法对两个操作数执行操作。在这种情况下,它是加法。

因此,基本上a1是累加器,当前为零并a2保存 15。第一次运行后,累加器中有 15 并a2保存下一个值,即 39。

所以,0 + 15 = 15

现在,在第二次运行时,在累加器中减少 throwsa2的值 39,然后对两个操作数执行操作。

所以,15 + 39 = 54

现在,在第三次运行时,累加器的总和为 15 和 39,即 54。a2现在,reduce 方法将 20 扔到累加器上,总和为54 + 20 = 74.

这个过程一直持续到数组结束。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容