当前位置:
从数组Reduce中构建Map等12个函数
时间:2025-11-05 09:23:15 出处:人工智能阅读(143)

如我们所知,从数JavaScript是组Re中当今流行语言中对函数式编程支持最好的编程语言。而函数式编程"从一到无穷”的构建个函起点是 reduce,本文我们将尝试从 reduce 起步构建所有的从数其他函数。

一、组Re中万物之始 array.reduce 的构建个函应用
Reduce的核心在于降维,将数组reduce为一个值,从数比如求和:
const arr = [52,组Re中 71, 27, 38]; const sum = (x, y) => x + y; const cusSum = arr.reduce(sum, 0);将reduce作为思考工具,脑子中要始终留有 initial-value 初始值。构建个函
二、从数构建 array.map 从数学到编程
map是源码下载组Re中数学思维而直接入编程,从reduce中模拟构建为:
const cusMap = (arr,构建个函 fn) => arr.reduce((x, y) => x.concat(fn(y)), []);三、构建 array.flat array.flatMap 拍平数组
从array.flat我们窥探到 declaratively 编程的从数优势,只须将精力专注到要完成的组Re中任务上,而不必理会实现细节。构建个函用 reduce 实现为:
当只 flat 到一层深度时候:
# flat only to one level const flat1 = arr => [].concat(...arr); const flat2 = arr = arr.reduce(acc, v => acc.concat(v), [])当需要 flat 到任意深度时, 用 reduce 完全重构 flat:
if (!Array.prototype.flat) { Array.prototype.flat = function(n = 1) { this.flatAllX = () => this.reduce( (f, v) => f.concat(Array.isArray(v) ? v.flat(Infinity) : v), [] ); this.flatOneX = () => this.reduce((f, v) => f.concat(v), []); return n === Infinity ? this.flatAllX() : n === 1 ? this.flatOneX() : this.flatOneX().flat(n - 1); }; }四、array.filter 迈向高阶的逻辑判断 logic predicate
为什么要用 reduce 重新构建,因为能够帮助在头脑中始终擦亮 function 与 最终输出 acculator 的概念。
const cusFilter = (arr, fn) => arr.reduce((acc, val) => (fn(val) ? acc.concat(y) : acc), []);五、array.find 与 array.findIndex 只找出首个元素
array.filter将会筛选出来全部的符合要求的元素,源码库当我们只要单个元素的时候则应用 array.find.
const cusFind = arr.reduce((acc, val) => (acc === undefined && fn(val) ? val : acc), undefined);重新构建 array.findIndex:
const cusFindIndex = arr.reduce((x, y, i) => (x == -1 && fn(y) ? i : x), -1);进而,我们用 find 与 findIndex 简单的构建 includes 与 indexOf。
arr.includes(value); // arr.find(v => v === value) arr.indexOf(value); // arr.findIndex(v => v === value)六、快捷的 array.some 与 array.every
array 与 some 两函数虽然简单,思考和使用的时候尤其顺手。
// arr.every(fn); arr.reduce((a, v) => a && fn(v), true); // a for accumulator, // arr.some(fn); arr.reduce((a, v) => a|| fn(v), false); // v for value至此,我们从reduce出发,将其他几个高阶函数全部模拟出来,reduce模拟帮助我们强化对每个函数中输入的arguments与输出的 result 的辨识。
香港云服务器
分享到:
温馨提示:以上内容和图片整理于网络,仅供参考,希望对您有帮助!如有侵权行为请联系删除!
猜你喜欢
- 电脑更新错误
- Cookies和Session的区别和理解
- 如何从复杂单体应用快速迁移到微服务?
- Apache Flink 漫谈系列(13) - Table API 概述
- 三星Note3处理器的性能与特点(探析三星Note3处理器的优势及应用领域)
- 自动化测试哪种编程语言更好?
- 程序员面试时这样介绍自己的项目经验,成功率能达到98.99%
- 基于OpenResty的单机10万TPS网关在物流业务中的应用
- 打开上网客户端、新立得,这些涉及到系统的都要输入密码,对于我们大多数人来说,用Linux无非是做桌面应用,对安全性没必要搞得跟服务器一些。解决办法一: 在启动时进入安全模式,这时是用root登录的,执行: chmod 740 /etc/sudoers 然后打开/etc/sudoers这个文件,把最后一行: %admin ALL=(ALL) 保存退出。 执行: reboot your ubuntu.OK! 解决方法二:Ubuntu默认不能直接用root帐户登录,必须从第一个创建的用户(既安装时创建的那个用户)通过su或sudo来获得root权限。在Ubuntu中对系统进行操作很多时候都要使用这个命令,由此可见对于新来说很有必要来认识这个命令。这或许不太方便,但这样增加了安全性,避免用户由于误操作而损坏系统。sudo补充:通常我们并不以root身份登录,但是当我们执行某些命令 (command)时需要用到root权限,我们通常都是用sudo command来执行command。由于使用Ubuntu,所以经常都都用sudo,而使用sudo时,又得输入密码,所以我就寻找sudo不输入密码的方法。前阵子google了一下,很容容易找到一个方法,但是对其不够理解,今天,仔细研究了一下/etc/sudoers这个文件,对于如何实现自己的需求就非常清楚了。网上说看到的资料往往写得不清楚,所以我根据自己的需求好好整理了一下。 假设我的用户名为jay(属于 admin组),使sudo不用密码的方法如下。 1. 假如想把admin组的用户都sudo不用密码那么可以将这一行换为:%admin ALL=(ALL) NOPASSWD: NOPASSWD ALL即可。 注意:我自己的一个配置没生效,找原因还找了阵子,写到这里吧。 我添加jay ALL = NOPASSWD: ALL这样一行;但是,jay执行sudo时还是需要输入密码,这是为什么? 原来是,我这一行在%admin ALL=(ALL) ALL组策略之前前,后面的组配置覆盖了前面的配置,而jay属于admin组,所以需要密码。 这时,只需要将%admin行用#注释掉即可。OK!然后立马就生效了,可能执行sudo时系统都会去读取/etc/sudoers的,所以立即就生效了。 另外,附带公司某服务器的一个/etc/sudoers配置: 复制代码代码如下: 通过修改/etc/sudoers 上面说的并不准确,要注意以下几点。 编辑/etc/sudoers文件使用“超级用户终端”,而不能使用普通的终端。“超级用户终端”启动通过右键“编辑菜单”命令添加。 编辑完之后使用wq!而不是wq退出