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

多对象字段值一致性判断逻辑修复:null/undefined场景结果不符合预期

多对象字段值一致性判断逻辑修复:null/undefined场景结果不符合预期

嘿,我看你碰到的问题是:当第一个选中对象的字段是null/undefined,后面的对象对应字段有实际值时,代码没有返回预期的various,反而直接返回了后面的字段值对吧?咱们来一步步把这个逻辑捋顺修复好。

首先得分析下你当前determineUniformity函数的问题:它在fieldValue为空的时候直接返回recordValue,这就导致如果初始基准值(第一个对象的字段)是null/undefined,第二个对象的字段值会直接覆盖它——但空值和非空值本身就是不一致的,这时候应该返回various才对。

那怎么调整逻辑呢?我们需要覆盖这些场景:

  • 初始状态(fieldValue还没被赋值,也就是undefined):直接把当前recordValue作为基准值
  • 一旦字段已经被标记为various,后续不管什么值都保持various
  • 当有基准值后,不管基准值是普通值还是null/undefined,只要和当前recordValue不相等,就返回various;相等则保留基准值

下面是修复后的完整代码:

const determineUniformity = (fieldValue, recordValue) => {
    // 已经标记为various的话,直接返回,不再修改
    if (fieldValue === 'various') {
        return 'various';
    }
    // 还没有基准值的时候,用当前值作为初始基准
    if (fieldValue === undefined) {
        return recordValue;
    }
    // 严格比较基准值和当前值,不等就返回various
    return fieldValue === recordValue ? fieldValue : 'various';
};

const valuesEvaluator = selectedRecords => {
    // 测试用例
    selectedRecords = [
        { name: 'record1', height: null, width: 'width1' },
        { name: 'record2', height: 'height2', width: null }
    ];
    let name, height, width;
    selectedRecords.forEach(record => {
        name = determineUniformity(name, record.name);
        height = determineUniformity(height, record.height);
        width = determineUniformity(width, record.width);
    });

    console.log('name', name); // Output: various -- 正确
    console.log('height', height); // Output: various -- 现在符合预期了
    console.log('width', width); // Output: various -- 正确
};

valuesEvaluator();

咱们来验证下这个逻辑:

  • 对于height字段,第一个值是null,第二个是height2,两者严格不相等,所以返回various,完美解决你的问题
  • 不管是前空后有值、前有值后空,还是任意n个对象,只要有一个值和基准值不一致,就会标记为various,后续的对象也不会改变这个结果
  • 如果需要把null和undefined视为相同的空值,可以把判断改成fieldValue == recordValue(用双等号),根据你的需求调整就行

备注:内容来源于stack exchange,提问作者Bhupesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 09:03:04