为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript 中 BigInt 类型的 Math.max 和 Math.min 的替代方案

Javascript 中 BigInt 类型的 Math.max 和 Math.min 的替代方案

摇曳的蔷薇 2022-07-08 18:02:45
在 Javascript 中:Math.max 和 Math.min 不适用于 BigInt 类型。例如:> Math.max(1n, 2n)Thrown:TypeError: Cannot convert a BigInt value to a number    at Math.max (<anonymous>)>是否有在 BigInts 上执行这些操作的内置函数?
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

怎么样


const bigIntMax = (...args) => args.reduce((m, e) => e > m ? e : m);

const bigIntMin = (...args) => args.reduce((m, e) => e < m ? e : m);

如果你想要两个


const bigIntMinAndMax = (...args) => {

  return args.reduce(([min,max], e) => {

     return [

       e < min ? e : min, 

       e > max ? e : max,

     ];

  }, [args[0], args[0]]);

};


const [min, max] = bigIntMinAndMax(

   BigInt(40),

   BigInt(50),

   BigInt(30),

   BigInt(10),

   BigInt(20),

);


查看完整回答
反对 回复 2022-07-08
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

经过一番谷歌搜索后,答案似乎是否定的,Javascript 对此没有内置函数。


这是与内置签名匹配的 bigint 的 min 和 max 的实现,除了它会为空列表引发错误(而不是返回 +/-Infinity,因为 BigInt 不能表示无穷大):


function bigint_min(...args){

    if (args.length < 1){ throw 'Min of empty list'; }

    m = args[0];

    args.forEach(a=>{if (a < m) {m = a}});

    return m;

}


function bigint_max(...args){

    if (args.length < 1){ throw 'Max of empty list'; }

    m = args[0];

    args.forEach(a=>{if (a > m) {m = a}});

    return m;

}


查看完整回答
反对 回复 2022-07-08
  • 2 回答
  • 0 关注
  • 243 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号