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

如何让JavaScript在无输入值时输出0而非空值?

解决JavaScript空值输出为0的问题

问题根源

你的代码仅在Util.ogl.db.lfBonuses?.[shipID]存在对应属性时才会为目标对象赋值,若属性不存在或值为0(除了fuel的特殊判断),目标对象里就不会生成对应属性,导致输出空值。核心需求是:无输入值时输出0,已有非0值保留原状态。

解决方案

方案1:提前枚举属性并初始化默认值(适用于属性固定的场景)

如果你明确知道所有需要处理的属性名,先给这些属性设置默认值0,再用数据源的非0值覆盖:

Util.ogl.shipsList.forEach(shipID => {
    // 替换为你实际需要的属性列表,比如attack、defense等
    const defaultStats = { attack: 0, defense: 0, shield: 0 };
    // 保留原有非0值,同时初始化新属性为0
    jsonData[0][0].lifeformBonuses.BaseStatsBooster[shipID] = {
        ...defaultStats,
        ...jsonData[0][0].lifeformBonuses.BaseStatsBooster[shipID]
    };

    Object.entries(Util.ogl.db.lfBonuses?.[shipID] || {}).forEach(([key, value]) => {
        if (key === 'fuel') {
            // 无fuel值或fuel为0时,输出0
            jsonData[0][0].lifeformBonuses.ShipFuelConsumption = value !== 0 
                ? Math.abs(value / 100) 
                : 0;
        } else {
            // 非fuel属性,值为0时也赋值0
            jsonData[0][0].lifeformBonuses.BaseStatsBooster[shipID][key] = value / 100;
        }
    });
});

方案2:动态处理所有属性(适用于属性不固定的场景)

如果属性名不固定,无法提前枚举,就统一处理所有可能的属性,确保无值时设为0:

Util.ogl.shipsList.forEach(shipID => {
    // 确保目标对象存在,初始为空对象
    const targetBooster = jsonData[0][0].lifeformBonuses.BaseStatsBooster[shipID] || {};
    jsonData[0][0].lifeformBonuses.BaseStatsBooster[shipID] = targetBooster;
    
    const sourceBonuses = Util.ogl.db.lfBonuses?.[shipID] || {};

    // 单独处理fuel:无值或值为0时输出0
    jsonData[0][0].lifeformBonuses.ShipFuelConsumption = sourceBonuses.fuel !== undefined
        ? (sourceBonuses.fuel !== 0 ? Math.abs(sourceBonuses.fuel / 100) : 0)
        : 0;

    // 获取所有需要处理的属性:原有属性 + 数据源属性
    const allKeys = new Set([...Object.keys(targetBooster), ...Object.keys(sourceBonuses)]);
    allKeys.forEach(key => {
        if (key === 'fuel') return; // fuel已单独处理
        // 无值时取0,避免空值
        const value = sourceBonuses[key] ?? 0;
        targetBooster[key] = value / 100;
    });
});

关键说明

  • 使用??空值合并运算符替代||:||会把0当成假值覆盖,而??仅处理undefined或null,能保留合法的0值
  • 对ShipFuelConsumption补充判断:确保无fuel数据时也赋值0
  • 覆盖/初始化所有属性:不管原有对象还是数据源里的属性,都确保有值,不会出现空属性

内容的提问来源于stack exchange,提问作者ODIN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:25:12