函数 – JavaScript 挑战

函数 - javascript 挑战

您可以在 repo github 上找到这篇文章中的所有代码。

功能相关的挑战

参数和参数

/** * @param {function} fn * @return {number} */function functionlength(fn) {  return fn.length;}// usage examplefunction myfunction(a, b, c) {  console.log(a, b, c);}console.log(functionlength(myfunction)); // => 3/** * @param {...any} args * @return {number} */function numofarguments(...args) {  // return args.length;  return arguments.length;}// usage exampleconsole.log(numofarguments(1, 2, 3, 4, 5)); // => 5console.log(numofarguments()); // => 0

撰写

/** * @param {...functions} fns * @return function */function compose(...fns) {  return function (x) {    let result = x;    for (const fn of fns.reverse()) {      result = fn(result);    }    return result;  };}// usage exampleconst add1 = (num) => num + 1;const double = (num) => num * 2;const subtract10 = (num) => num - 10;const composedfn = compose(subtract10, double, add1);console.log(composedfn(3)); // (3 + 1) * 2 - 10 => -2

柯里化

/** * @param {function} fn * @return {function} */function curry(fn) {  return function curried(...args) {    if (args.length >= fn.length) {      return fn.apply(this, args);    }    return curried.bind(this, ...args);  };}// usage example// single parameter casefunction add(a, b) {  return a + b;}const curriedadd = curry(add);console.log(curriedadd(3)(4)); // => 7const alreadyaddedthree = curriedadd(3);console.log(alreadyaddedthree(4)); // => 7// fixed parameters casefunction addtwo(a, b) {  return a + b;}const curriedaddtwo = curry(addtwo);console.log(curriedaddtwo(3, 4)); // => 7console.log(curriedaddtwo(3)(4)); // => 7const alreadyaddedthreeb = curriedadd(3);console.log(alreadyaddedthreeb(4)); // => 7//-------------------------------------------/** * @param {function} fn * @return {function} */function curry(fn) {  return function curried(...args) {    const bindfn = curried.bind(this, ...args);    bindfn[symbol.toprimitive] = () => fn.call(this, ...args);    return bindfn;  };}// usage example// non-fixed parameters casefunction multiply(...numbers) {  return numbers.reduce((a, b) => a * b, 1);}const curriedmultiply = curry(multiply);const multiplybythree = curriedmultiply(3);console.log(multiplybythree); // => 3console.log(multiplybythree(4)); // => 12const multiplybyfifteen = multiplybythree(5);console.log(multiplybyfifteen); // => 15console.log(multiplybyfifteen(2)); // => 30console.log(curriedmultiply(1)(2)(3)(4)); // => 24console.log(curriedmultiply(1, 2, 3, 4)); // => 24

备忘录

/** * @param {function} func * @return {function} */function memoize(fn) {  const cache = new map();  return function (arg) {    if (cache.has(arg)) {      return cache.get(arg);    }    const result = fn.call(this, arg);    cache.set(arg, result);    return result;  };}// usage examplefunction expensivefunction(n) {  console.log("computing...");  return n * 2;}// create a memoized version of the function.const memoizedexpensivefunction = memoize(expensivefunction);// first call (computes and caches the result).console.log(memoizedexpensivefunction(5)); // => computing... 10// second call with the same argument (returns the cached result).console.log(memoizedexpensivefunction(5)); // => 10// third call with a different argument (computes and caches the new result).console.log(memoizedexpensivefunction(10)); // => computing... 20// fourth call with the same argument as the third call (returns the cached result).console.log(memoizedexpensivefunction(10)); // => 20// ----------------------------------------// when parameters could be array/** * @param {function} fn * @return {function} */function memoize(fn) {  const cache = new map();  return function (...args) {    const key = json.stringify(args);    if (cache.has(key)) {      return cache.get(key);    }    const result = fn.call(this, ...args);    cache.set(key, result);    return result;  };}// usage examplefunction expensivemul(a, b) {  console.log("computing...");  return a * b;}// create a memoized version of the function.const memoizedexpensivemul = memoize(expensivemul);// first call (computes and caches the result).console.log(memoizedexpensivemul(3, 7)); // => computing... 21// second call with the same argument (returns the cached result).console.log(memoizedexpensivemul(3, 7)); // => 21// third call with a different argument (computes and caches the new result).console.log(memoizedexpensivemul(5, 8)); // => computing... 40// fourth call with the same argument as the third call (returns the cached result).console.log(memoizedexpensivemul(5, 8)); // => 40

部分的

/** * @param {Function} fn * @param {any[]} args * @returns {Function} */function partial(fn, ...args) {  return function (...restArgs) {    const copyArgs = args.map((arg) => {      return arg === partial.placeholder ? restArgs.shift() : arg;    });    return fn.call(this, ...copyArgs, ...restArgs);  };}partial.placeholder = Symbol();// Usage exampleconst func = (...args) => args;const func123 = partial(func, 1, 2, 3);console.log(func123(4)); // => [1, 2, 3, 4]

参考

伟大的前端参数对象 – mdn参数 – mdn函数组合(计算机科学)- wikipedia.org11。什么是构图?创建管道() – bfe.dev1.实现 curry() – bfe.dev2.实现带有占位符支持的 curry() – bfe.dev柯里化 – wikipedia.org14。实现通用记忆功能 – memo() – bfe.dev122。实现 memoizeone() – bfe.dev记忆 – wikipedia.org部分应用 – wikipedia.org139。实现 _.partial() – bfe.dev

以上就是函数 – JavaScript 挑战的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1495025.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 17:04:52
下一篇 2025年12月19日 17:05:18

相关推荐

  • 怎样用JavaScript实现数字格式化?

    用javascript实现数字格式化可以使用intl.numberformat对象。1. 基本的千位分隔:new intl.numberformat(‘en-us’).format(1234567)输出1,234,567。2. 百分比格式:new intl.numberfor…

    2025年12月20日
    000
  • 怎样用JavaScript实现PDF预览?

    javascript实现pdf预览可以通过多种方式实现,我推荐使用pdf.js。1. 使用html5的元素和pdf.js库解析并绘制pdf。2. pdf.js开源、性能优异,无需插件即可在浏览器中显示pdf。3. 注意性能优化、兼容性和用户交互,以提升用户体验。 用JavaScript实现PDF预览…

    2025年12月20日
    000
  • JavaScript中如何格式化日期?

    javascript中格式化日期的方法有三种:1. 使用date对象手动拼接日期字符串,简单但易出错;2. 使用intl.datetimeformat对象,灵活但旧浏览器可能不支持;3. 使用moment.js库,功能强大但增加依赖。 让我们聊聊JavaScript中如何格式化日期吧。这是一个常见的…

    2025年12月20日
    000
  • JavaScript中如何处理设备数据?

    在javascript中处理设备数据主要通过三种方式:1. 使用浏览器api,如navigator和geolocation api;2. 使用第三方库,如device.js和cordova;3. 服务器端处理,通过ajax或fetch api发送数据到服务器进行处理。 在JavaScript中处理设…

    2025年12月20日
    000
  • 怎样在JavaScript中获取用户的地理位置?

    在JavaScript中获取用户的地理位置是一个非常实用的功能,特别是在开发需要定位服务的Web应用时。让我先回答这个问题:在JavaScript中,我们可以通过Geolocation API来获取用户的地理位置。这个API是HTML5的一部分,允许你请求用户的当前位置信息。 现在,让我们深入探讨一…

    2025年12月20日
    000
  • 如何用JavaScript实现货币格式化?

    javascript可以用内置方法和intl.numberformat api实现货币格式化。1.使用内置方法如tofixed和正则表达式进行基本格式化。2.使用intl.numberformat api处理复杂需求,如不同货币和地区格式。 货币格式化在前端开发中是个常见需求,如何用JavaScri…

    2025年12月20日
    000
  • 如何用JavaScript实现可拖拽排序列表?

    用javascript实现可拖拽排序列表的方法是:1.监听dragstart、dragover、drop和dragend事件;2.在dragover事件中计算鼠标位置决定插入位置。通过原生javascript实现这个功能,可以完全掌控代码逻辑并进行个性化定制,但需要处理更多细节和兼容性问题。 用Ja…

    2025年12月20日
    000
  • 怎样在JavaScript中格式化日期?

    在javascript中格式化日期可以使用多种方法:1) 使用内置的date对象,但不够灵活;2) 使用第三方库如moment.js、date-fns,提供强大功能但需考虑依赖成本;3) 使用intl.datetimeformat,灵活但需注意浏览器兼容性;4) 自定义函数,提供最大灵活性和控制权,…

    2025年12月20日
    000
  • 如何用JavaScript实现基数排序?

    基数排序在javascript中可以通过数组和循环实现。1) 确定最大位数。2) 使用桶排序思想,从最低位到最高位排序。3) 适用于整数排序,时间复杂度为o(d(n+k)),但需注意稳定性和空间复杂度。 用JavaScript实现基数排序(Radix Sort)不仅是一项技术任务,更是一种对算法效率…

    2025年12月20日
    000
  • 怎样用JavaScript部署应用?

    使用javascript部署应用可以通过以下步骤实现:1. 准备工作:安装node.js和npm,初始化项目。2. 前端部署:使用react,推送到github并通过vercel部署。3. 后端部署:使用express.js,推送到github并通过heroku部署。4. 数据库部署:使用mongo…

    2025年12月20日
    000
  • 如何在JavaScript中格式化日期?

    在javascript中格式化日期可以使用以下方法:1. 使用date对象的tolocaledatestring方法,如date.tolocaledatestring(‘en-us’)可输出”12/31/2023″。2. 对于更复杂的格式,使用tolo…

    2025年12月20日
    000
  • 如何用JavaScript格式化日期?

    javascript格式化日期可以通过以下步骤实现:使用date对象的getfullyear()、getmonth()、getdate()等方法手动拼接日期,如yyyy-mm-dd格式。引入date-fns库,使用其format函数灵活指定日期格式,如yyyy-mm-dd hh:mm:ss。处理时区…

    2025年12月20日
    000
  • 如何用JavaScript使用ESLint?

    使用javascript的eslint可以提高代码质量和一致性。具体步骤包括:1. 安装eslint:使用npm install eslint –save-dev。2. 初始化配置文件:运行npx eslint –init生成.eslintrc.js。3. 检查代码:运行np…

    2025年12月20日
    000
  • 若依框架中MyBatis依赖是如何引入的?

    在若依框架中引入mybatis依赖的方式是通过使用spring boot的starter来管理依赖的。具体来说,mybatis的依赖是通过mybatis-spring-boot-starter这个依赖项引入的。这个依赖项包含了mybatis所需的所有基本依赖,因此开发者无需手动添加mybatis的核…

    2025年12月20日
    000
  • 怎样用JavaScript格式化日期?

    javascript中格式化日期的方法包括:1. 使用字符串拼接,2. 使用intl.datetimeformat对象。1. 通过date对象的方法获取年月日信息,然后拼接成所需格式,如”2023-5-15″。2. intl.datetimeformat提供更灵活的格式化,如…

    2025年12月20日
    000
  • js 怎么把时间戳转化为日期

    javascript 中将时间戳转换为日期的方法包括:1) 使用 date 对象和 tolocalestring() 方法进行基本转换;2) 通过 getfullyear() 等方法自定义格式;3) 利用 intl.datetimeformat 处理不同时区。通过这些方法,可以高效地将时间戳转换为可…

    2025年12月20日
    000
  • 如何下载JDK 8中的rt.jar源码?

    在java开发过程中,常常需要参考jdk的源代码,尤其是在rt.jar中。最近有用户询问如何下载jdk 8中的rt.jar源码。虽然他们在github上找到了openjdk的源码,但下载的压缩包中没有打包好的源代码文件。此外,他们发现安装后的src.zip文件中缺少某些类,如sun.reflect.…

    2025年12月20日
    000
  • 如何获取JDK8中rt.jar的完整源码?

    如何获取JDK8中rt.jar的完整源码? 在java开发过程中,经常需要查看jdk的源码,尤其是像rt.jar这样的核心库。用户在github上找到了openjdk的源码,但发现下载的zip文件中并没有打包好的源码文件。此外,安装后的src.zip中也缺少rt.jar中某些关键的类,比如sun.r…

    2025年12月20日
    000
  • 如何获取JDK 8中rt.jar的源码?

    JDK8 rt.jar源码获取指南 在java开发过程中,常常需要查看jdk的源码以便更好地理解和调试程序。对于java 8版本的rt.jar,获取其源码是一个常见的问题。虽然在github上可以找到openjdk的源码,但下载的压缩包中并不包含打包好的源码文件。此外,安装后的src.zip中也缺少…

    2025年12月20日
    000
  • 如何实现聊天记录编辑功能的互斥效果?

    问题介绍 在实现聊天记录编辑功能时,用户希望在点击一条聊天记录进行编辑后,再点击另一条记录时,前一条记录的编辑状态能够关闭,实现互斥效果。然而,实际效果却是所有点击的记录都会同时展示编辑框,无法达到预期的互斥效果。 具体实现过程 子组件: esc键取消 · 回车键保存 子组件 script 内主要代…

    好文分享 2025年12月20日
    000

发表回复

登录后才能评论
关注微信