我已经创建了一个clamp函数来将值限制在给定范围内.(Almost every one of you know what a clamp function does)

这就是我创建的函数(使用TS)

function clamp(value: number, min: number, max: number) {
  return Math.min(Math.max(value, min), max)
}

但是,在某些用例中,我希望取消将所有三个paramsNumber类型转换为在函数中传递它.我知道我会做这样的事

function clamp(value: number, min: number, max: number) {
  return Math.min(Math.max(Number(value), Number(min)), Number(max))
}

将每一种param类型转换为Number类型.

我想知道有没有其他方法可以一次将paramNumber种文字转换??

推荐答案

您可以使用Array.map一次将所有值转换为Number.在普通的JS中:

function allNumbers(...values) {
  return values.map(Number).filter(v => !isNaN(v));
}

console.log(`${allNumbers(1,`26`, 42)}`);
console.log(`${allNumbers(...[...`123`])}`);
console.log(`${allNumbers(`20`, `+`, `22`, `=`, 42)}`);
console.log(`${allNumbers(...(`20+22=42`.split(/[+=]/)))}`);

Typescript (see also...)

function clamp(...values: Array<number|string>) {
  const numbers: (number|Nan)[] = values.map(Number);
  if (numbers.filter(v => !isNaN(v)).length === 3) {
    const [value, min, max] = numbers;
    return Math.min(Math.max(value, min), max);
  }
  return `insufficient argument(s)`;
}

console.log(clamp(42));
console.log(clamp(1,3,`42`));

Javascript相关问答推荐

被CSS优先级所迷惑

Javascript,部分重排序数组

判断表格单元格中是否存在文本框

使用i18next在React中不重新加载翻译动态数据的问题

构造HTML表单以使用表单数据创建对象数组

用于编辑CSS样式的Java脚本

将内容大小设置为剩余可用空间,但如果需要,可在div上显示滚动条

如何在箭头函数中引入or子句?

邮箱密码重置链接不适用于已部署的React应用程序

在画布中调整边上反弹框的大小失败

try 使用PM2在AWS ubuntu服务器上运行 node 进程时出错

如何为仅有数据可用的点显示X轴标签?

为什么NULL不能在构造函数的.Prototype中工作

我为什么要使用回调而不是等待?

如何在Reaction中清除输入字段

谷歌饼图3D切片

找不到处于状态的联系人

我正在用JS编码一个链表,而我编写的一个Prepreend函数并没有按照我的预期工作

如何处理街机物理中的碰撞结束

从对象数组上载图像(多个)