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

如何校验tokens数组中对象是否符合{tokenName: string}格式?

问题分析与修复方案

你的代码存在几个关键问题,导致测试不通过:

  1. 未检查元素是否为有效对象:如果数组里有null、undefined或者字符串、数字这类非对象元素,访问tokens[i].tokenName会直接抛出运行时错误,根本走不到错误判断逻辑。
  2. 属性检查顺序错误:先访问tokens[i].tokenName再判断hasOwnProperty,如果对象没有这个属性,虽然typeof会返回undefined,但逻辑上应该先确认属性存在,再判断类型。
  3. 未严格限制对象结构:要求是严格符合{tokenName: string},意味着对象不能有任何额外属性,你的代码没做这个校验。

修正后的代码

for (let i = 0; i < tokens.length; i++) {
  const item = tokens[i];
  // 检查当前元素是否为非空对象
  if (typeof item !== 'object' || item === null) {
    throw new Error("Invalid array format: element must be an object");
  }
  // 获取对象的所有自有属性名
  const keys = Object.keys(item);
  // 检查是否只有tokenName这一个属性
  if (keys.length !== 1 || keys[0] !== 'tokenName') {
    throw new Error("Invalid array format: object must only contain 'tokenName' property");
  }
  // 检查tokenName的类型是否为字符串
  if (typeof item.tokenName !== 'string') {
    throw new Error("Invalid array format: 'tokenName' must be a string");
  }
  // 符合要求,执行后续逻辑
  // do stuff
}

关键校验点说明

  • 非空对象校验:先排除基本类型和null,避免后续访问属性时报错。
  • 属性数量与名称校验:通过Object.keys获取所有自有属性,确保只有tokenName这一个键,实现严格结构匹配。
  • 类型校验:最后确认tokenName的类型是字符串,覆盖所有不符合类型的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:50:55