You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中优雅解决数组符号乘积计算返回负零问题

负零问题的简洁解决方法

JS中-0是带符号位的特殊零值,和0做===判断时返回true,但直接输出会显示为-0,不需要写独立的if分支,有几种更简洁的实现方式:

  • 第一种是利用JS的假值短路特性,直接在reduce返回结果后追加|| 0即可。因为本场景下返回值只可能是-1、0、1三个值,其中只有0和-0是假值,||会自动把-0替换为普通0,不会影响1和-1的正常返回:
function cal(A)
{
    return A.reduce((total, currentValue) => total * Math.sign(currentValue), 1) || 0;
}
  • 第二种是用按位或运算,按位操作会将数值转为32位整数,自动抹除-0的符号位,写法同样精简:
function cal(A)
{
    return A.reduce((total, currentValue) => total * Math.sign(currentValue), 1) | 0;
}
  • 如果追求更高性能,可以完全绕开乘法和Math.sign的逻辑,遍历过程中统计负数个数,遇到0直接提前返回0,从根源避免负零产生,大数组场景下效率更高:
function cal(A)
{
    let negativeCount = 0;
    for (const num of A) {
        if (num === 0) return 0;
        if (num < 0) negativeCount++;
    }
    return negativeCount % 2 ? -1 : 1;
}

三种写法都可以通过所有示例测试:

  • 输入[1,2,3]返回1
  • 输入[1,-2,3]返回-1
  • 输入[1,-2,3,0]返回0

内容的提问来源于stack exchange,提问作者Nguyễn Văn Phong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 12:36:20