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

JavaScript检查对象数组嵌套属性唯一性的函数运行异常如何解决

问题分析

你的代码存在3个核心错误,导致嵌套属性场景无法正常运行:

  • 不支持嵌套属性路径解析:你直接用v[keyName]读取属性,当keyName是spaceGeometry.ceilingHeight这类带点的嵌套路径时,代码会把整个字符串当作单个一级属性名查找,对象上不存在这个名字的一级属性,所以读取结果全是undefined。
  • 错误使用数组的size属性:你把Set实例展开为数组后,用uniqueValues.size判断长度,数组不存在size属性,只有length属性,所以uniqueValues.size !== 1的判断永远为真,函数无论什么情况都会返回null。
  • 返回值的属性读取逻辑错误:返回语句里写的arrToCheck[0].keyName是读取对象上名为keyName的固定属性,不是读取keyName变量对应的属性;同时includeFullObject是布尔参数,你写的arrToCheck[0].includeFullObject是读取对象上的includeFullObject属性,和参数逻辑完全不符。

修复后的代码

const getNullOrUniquePropertyValue = (arrToCheck, keyPath, includeFullObject = false) => {
  // 封装嵌套属性读取方法
  const getPropByPath = (obj, path) => {
    return path.split('.').reduce((current, key) => {
      return current && current[key] !== undefined ? current[key] : undefined;
    }, obj);
  };

  // 统一读取所有属性值
  const valueSet = new Set(arrToCheck.map(item => getPropByPath(item, keyPath)));
  if (valueSet.size !== 1) return null;

  // 按参数返回对应结果
  return includeFullObject ? arrToCheck[0] : getPropByPath(arrToCheck[0], keyPath);
};

验证测试

一级属性调用

// 传入的spaces数组designHubProjectSpaceTypeId不统一,返回null,符合预期
getNullOrUniquePropertyValue(spaces, 'designHubProjectSpaceTypeId')

嵌套属性调用

// 传入的spaces数组ceilingHeight全为9,返回9
getNullOrUniquePropertyValue(spaces, 'spaceGeometry.ceilingHeight')
// 返回完整的第一个对象
getNullOrUniquePropertyValue(spaces, 'spaceGeometry.ceilingHeight', true)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:15:07