真是令人费解
1
iOCZ 2023-08-01 15:11:44 +08:00
用 reduce
|
2
laoyutang 2023-08-01 15:35:56 +08:00
自己加不行么😓
|
3
Pipecraft 2023-08-01 16:49:26 +08:00
假如有 Math.sum(),不一定能减少很多代码吧。
数据少的情况 sum = Math.sum(1, 3, 5) vs. sum = 1 + 3 + 5 数据多的情况 const array = [1, 3, 4, ...] sum = Math.sum(...array) vs. sum = array.reduce((acc, v) => acc + v) (效率更高) |
5
libook 2023-08-01 17:18:32 +08:00
你可以去 https://github.com/tc39/ecma262 提交草案,大家都需要的话就有机会可以进标准。
Math.min()和 Math.max()是第一版标准就包含了,为啥第一版没加 sum 就无从考证了。 我个人十年开发经验来看,sum 其实用得真的不多,真要特定场景用得多了就用 reduce 封装个函数也很方便,还没有产生过非要有个 sum 的想法。 反而像前几年通过的 String.prototype.padStart()、String.prototype.padEnd()特性是真得挺实用的。 |
6
angrylid 2023-08-01 17:22:54 +08:00 5
在 JS 里面寻找符合直觉的设计是否搞错了什么(
|
7
Pipecraft 2023-08-01 18:22:30 +08:00
@Alias4ck #4 sum 函数里面需要遍历一次,array 解构时还有一次性能开销。所以我觉得 reduce 会效率更高一些。
但没有做实际的性能比较,也有可能是错的。 |
10
Pipecraft 2023-08-01 19:27:32 +08:00
@hsfzxjy #8 是可以。那 2 个,3 个,4 个等不是很多的数字时,怎么处理呢?
包装成数组调用的话,也挺麻烦。Math.min, Math.max 的写法更优雅一些吧。 这点性能开销也不大,要实现 Math.sum ,解构的方式还是好点吧。 |
11
moult 2023-08-01 19:30:41 +08:00 10
缺德代码:
let a = [1,2,3,4,5]; eval(a.join('+')); |
14
importmeta 2023-08-01 19:55:52 +08:00
我只知道 JS 加法运算不精确, 特别是小数加法, 必须用数学库.
|
15
xuanbg 2023-08-01 22:04:22 +08:00
都 2023 年了,JS 连长整型都不支持。。。辣鸡
|
16
secondwtq 2023-08-01 23:01:43 +08:00
不知道楼主学没学过 C ,C 里面是没有内置的 min/max 的,取两个数的最大值需要 a > b ? a : b
然后有的人喜欢定义一个宏 #define MAX(a, b) a > b ? a : b 又因为 C 预处理器宏是文本替换,所以这个会有各种坑 ... (为什么不定义函数?因为 C 直到 C11 才有个凑数的泛型 ...) 我看主题里都是假设有个容器,然后在容器里的数取 min/max ,但实际编码时很多时候就是算法需要在固定的数中间取,比如我算出一个 a ,a 可能是负数,我不想返回负数,就用 Math.max(0, a),因为有了这个库函数,所以不需要写 a > 0 ? a : 0 。 自己去 GitHub 上面搜,用解构取数组 min/max 的反而难找 https://github.com/search?q=Math.max&type=code&p=1 类似的加法直接用 + 就行了,不需要一个专门的函数 算是强行找点借口吧 ... |
17
ChefIsAwesome 2023-08-01 23:13:33 +08:00 via Android
为什么没有 Math.average ?令人费解
|
18
IvanLi127 2023-08-02 03:08:03 +08:00 via Android
这。。。是想批量提交给运行时提升效率?感觉没啥用啊这函数
|
19
dcsuibian 2023-08-02 03:22:25 +08:00
大胆猜测:因为 Java 没有 Math.sum()
因为 JavaScript 的 Date 实现是从 JDK 1.0 里抄来的,所以很难不怀疑 js 的 Math 也抄了 [JavaScript 中的 Date 对象取值 month 为什么是从 0 开始的?]( https://www.zhihu.com/question/263804983) |
20
Mutoo 2023-08-02 08:00:55 +08:00
Math.sum(1,"2",3)
|
21
JeffGe 2023-08-02 08:30:42 +08:00 via Android
你真想要的话可以自己 Polyfill
|
22
ophark 2023-08-02 09:11:43 +08:00
@ChefIsAwesome 我也加一个,为什么没有,Math.top(array, 10)求 top10 的数据,🐶狗头保命
|
23
crazyTanuki 2023-08-02 09:14:46 +08:00
确实 JavaScript 的原生工具库不太完善,很多东西都不好用,需要引用第三方工具库,不过随着 es 版本迭代,情况好多了
|
24
enchilada2020 2023-08-02 09:19:42 +08:00 via Android
@moult 谢谢 看吐了
|
25
enchilada2020 2023-08-02 09:21:28 +08:00 via Android
@xuanbg 您是不是在找:BigInt
|