iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Reduce怎么在JavaScript中使用
  • 372
分享到

Reduce怎么在JavaScript中使用

2023-06-07 23:06:39 372人浏览 泡泡鱼
摘要

本篇文章给大家分享的是有关Reduce怎么在javascript中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。JavaScript的特点1.JavaScript主要用来向

本篇文章给大家分享的是有关Reduce怎么在javascript中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

JavaScript的特点

1.JavaScript主要用来向html页面添加交互行为。2.JavaScript可以直接嵌入到HTML页面,但写成单独的js文件有利于结构和行为的分离。3.JavaScript具有跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行。

map

根据小技巧,map 最终返回值是数组,故 acc 也应该是一个数组,初始值使用空数组即可。

function map(arr, mapping) { return arr.reduce((acc, item, index) => [...acc, mapping(item, index, arr)], []);}

测试

map([null, false, 1, 0, '', () => {}, NaN], val => !!val);// [false, false, true, false, false, true, false]

filter

根据小技巧,filter 最终返回值也是数组,故 acc 也应该是一个数组,使用空数组即可。

function filter(arr, predicate) { return arr.reduce((acc, item, index) => predicate(item, index, arr) ? [...acc, item] : acc, []);}

测试

filter([null, false, 1, 0, '', () => {}, NaN], val => !!val);// [1, () => {}]

some

some 当目标数组为空返回 false,故初始值为 false

function some(arr, predicate) { return arr.reduce((acc, val, idx) => acc || predicate(val, idx, arr), false)}

测试:

some([null, false, 1, 0, '', () => {}, NaN], val => !!val);// truesome([null, false, 0, '', NaN], val => !!val);// false

附带提醒,二者对结果没影响但有性能区别,acc 放到前面因为是短路算法,可避免无谓的计算,故性能更高。

acc || predicate(val, idx, arr)

predicate(val, idx, arr) || acc

every

every 目标数组为空则返回 true,故初始值为 true

function every(arr, predicate) { return arr.reduce((acc, val, idx) => acc && predicate(val, idx, arr), true)}

findIndex

findIndex 目标数组为空返回 -1,故初始值 -1。

function findIndex(arr, predicate) { const NOT_FOUND_INDEX = -1; return arr.reduce((acc, val, idx) => { if (acc === NOT_FOUND_INDEX) { return predicate(val, idx, arr) ? idx : NOT_FOUND_INDEX; }  return acc; }, NOT_FOUND_INDEX)}

测试

findIndex([5, 12, 8, 130, 44], (element) => element > 8) // 3

pipe

一、实现以下函数

function pipe(...funcs) {}

使得

pipe(val => val * 2, Math.sqrt, val => val + 10)(2) // 12

利用该函数可以实现一些比较复杂的处理过程

// 挑选出 val 是正数的项对其 val 乘以 0.1 系数,然后将所有项的 val 相加,最终得到 3const process = pipe( arr => arr.filter(({ val }) => val > 0),  arr => arr.map(item => ({ ...item, val: item.val * 0.1 })),  arr => arr.reduce((acc, { val }) => acc + val, 0));process([{ val: -10 }, { val: 20 }, { val: -0.1 }, { val: 10 }]) // 3

二、实现以下函数,既能实现上述 pipe 的功能,而且返回函数接纳参数个数可不定

function pipe(...funcs) {}

使得以下单测通过

pipe(sum, Math.sqrt, val => val + 10)(0.1, 0.2, 0.7, 3) // 12

其中 sum 已实现

function sum(...args) { return args.reduce((a, b) => a + b);}

参考答案

一、返回函数接受一个参数

省略过滤掉非函数的 func 步骤

function pipe(...funcs) { return (arg) => { return funcs.reduce( (acc, func) => func(acc), arg ) }}
二、返回函数接受不定参数

同样省略了过滤掉非函数的 func 步骤

function pipe(...funcs) {// const realFuncs = funcs.filter(isFunction); return (...args) => { return funcs.reduce( (acc, func, idx) => idx === 0 ? func(...acc) : func(acc), args ) }}

性能更好的写法,避免无谓的对比,浪费 CPU

function pipe(...funcs) { return (...args) => { // 第一个已经处理,只需处理剩余的 return funcs.slice(1).reduce( (acc, func) => func(acc),  // 首先将特殊情况处理掉当做 `acc` funcs[0](...args) ) }}

第二种写法的 funcs[0](...args) 这个坑要注意,数组为空就爆炸了,因为空指针了。

实现 lodash.get

实现 get 使得以下示例返回 'hello world'

const obj = { a: { b: { c: 'hello world' } } };get(obj, 'a.b.c');

函数签名:

function get(obj, keyPath) {}

参考答案

function get(obj, keyPath) { if (!obj) { return undefined; } return keyPath.split('.').reduce((acc, key) => acc[key], obj);}

实现 lodash.flattenDeep

虽然使用 concat 和扩展运算符只能够 flatten 一层,但通过递归可以去做到深度 flatten。

方法一:扩展运算符

function flatDeep(arr) { return arr.reduce((acc, item) =>  Array.isArray(item) ? [...acc, ...flatDeep(item)] : [...acc, item], [] )}

方法二:concat

function flatDeep(arr) { return arr.reduce((acc, item) =>  acc.concat(Array.isArray(item) ? flatDeep(item) : item), [] )}

有趣的性能对比,扩展操作符 7 万次 1098ms,同样的时间 concat 只能执行 2 万次

function flatDeep(arr) { return arr.reduce((acc, item) =>  Array.isArray(item) ? [...acc, ...flatDeep(item)] : [...acc, item], [] )}var arr = repeat([1, [2], [[3]], [[[4]]]], 20);console.log(arr);console.log(flatDeep(arr));console.time('concat')for (i = 0; i < 7 * 10000; ++i) { flatDeep(arr)}console.timeEnd('concat')function repeat(arr, times) { let result = []; for (i = 0; i < times; ++i) { result.push(...arr) } return result; }

过滤掉对象中的空值

实现

clean({ foo: null, bar: undefined, baz: 'hello' })// { baz: 'hello' }

答案

export function clean(obj) { if (!obj) { return obj; } return Object.keys(obj).reduce((acc, key) => { if (!isNil(obj[key])) { acc[key] = obj[key]; } return acc; }, {});}

enumify

将常量对象模拟成 TS 的枚举

实现 enumify 使得

const Direction = { UP: 0, DOWN: 1, LEFT: 2, RIGHT: 3,};const actual = enumify(Direction);const expected = { UP: 0, DOWN: 1, LEFT: 2, RIGHT: 3, 0: 'UP', 1: 'DOWN', 2: 'LEFT', 3: 'RIGHT',};deepStrictEqual(actual, expected);

答案:

export function enumify(obj) { if (!isPlainObject(obj)) { throw new TypeError('the enumify target must be a plain object'); } return Object.keys(obj).reduce((acc, key) => { acc[key] = obj[key]; acc[obj[key]] = key; return acc; }, {});}

以上就是Reduce怎么在JavaScript中使用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: Reduce怎么在JavaScript中使用

本文链接: https://www.lsjlt.com/news/250414.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Reduce怎么在JavaScript中使用
    本篇文章给大家分享的是有关Reduce怎么在JavaScript中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。JavaScript的特点1.JavaScript主要用来向...
    99+
    2023-06-07
  • JavaScript中的reduce()怎么使用
    本篇内容介绍了“JavaScript中的reduce()怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2024-04-02
  • javascript中怎么使用reduce方法
    这篇文章主要为大家展示了“javascript中怎么使用reduce方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript中怎么使用reduce方法”这篇文章吧。在javascr...
    99+
    2023-06-15
  • 如何在JavaScript数组中使用reduce
    如何在JavaScript数组中使用reduce?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JavaScript的特点1.JavaScript主要用来向HTM...
    99+
    2023-06-14
  • Javascript中怎么使用ES6的map和reduce
    本文小编为大家详细介绍“Javascript中怎么使用ES6的map和reduce”,内容详细,步骤清晰,细节处理妥当,希望这篇“Javascript中怎么使用ES6的map和reduce”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
    99+
    2023-06-29
  • JavaScript中reduce函数怎么用
    这篇文章将为大家详细讲解有关JavaScript中reduce函数怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。reduce 函数语法: arr.reduce(callback(accum...
    99+
    2023-06-17
  • JavaScript中reduce()方法怎么用
    这篇文章主要讲解了“JavaScript中reduce()方法怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中reduce()方法怎么用”吧!一、语法arr.red...
    99+
    2023-06-30
  • javascript中的reduce fold unfold怎么用
    这篇文章给大家分享的是有关javascript中的reduce fold unfold怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JavaScript的作用是什么1、能够嵌入动态文本于HTML页面。2、对...
    99+
    2023-06-14
  • JavaScript中reduce()方法如何使用
    本篇文章为大家展示了JavaScript中reduce()方法如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。reduce()方法对数组中的每一个元素执行一个...
    99+
    2024-04-02
  • JavaScript数组reduce()方法怎么使用
    这篇文章主要介绍了JavaScript数组reduce()方法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript数组reduce()方法怎么使用文章都会...
    99+
    2024-04-02
  • 如何使用javascript中reduce()方法
    这篇文章主要讲解了“如何使用javascript中reduce()方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用javascript中reduc...
    99+
    2024-04-02
  • 怎么使用javascript数组求和中的reduce()方法
    这篇文章将为大家详细讲解有关怎么使用javascript数组求和中的reduce()方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝...
    99+
    2023-06-14
  • JavaScript中reduce()详解及使用方法
    目录reduce():总结:reduce 应用场景:1.数组里所有值的和2.累加数组中对象的值3.将二维数组转为一维数组4.计算数组中每个元素出现的次数5.按属性对object分类6...
    99+
    2023-05-18
    js中reduce详解 js中reduce的用法 js reduce
  • JavaScript中reduce()和reduceRight()方法怎么用
    这篇文章主要为大家展示了“JavaScript中reduce()和reduceRight()方法怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“J...
    99+
    2024-04-02
  • 怎么在python中使用reduce实现累积运算
    这篇文章将为大家详细讲解有关怎么在python中使用reduce实现累积运算,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python的数据类型有哪些python的数据类型:1. 数字类型,...
    99+
    2023-06-14
  • Python中reduce函数怎么使用
    本文小编为大家详细介绍“Python中reduce函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python中reduce函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。reduce函数原...
    99+
    2023-07-02
  • Javascript数组方法reduce怎么用
    这篇文章主要为大家展示了“Javascript数组方法reduce怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Javascript数组方法reduce怎...
    99+
    2024-04-02
  • JavaScript数组reduce()方法怎么用
    本篇内容主要讲解“JavaScript数组reduce()方法怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript数组reduce()方法怎么用”吧!将某个值减去数组中的每个...
    99+
    2023-06-26
  • JavaScript中数组reduce()方法使用详情
    语法: reduce()对数组中的每个元素进行累加,返回一个新的值,可以传入初始值简单的讲就是返回数组中所有元素的和数  不会改变原始组的值  不会对空数组执行回...
    99+
    2024-04-02
  • 如何在java8中使用reduce()求和
    这篇文章将为大家详细讲解有关如何在java8中使用reduce()求和,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.stream().reduce()单字段求和(1)普通数字求和&nbs...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作