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

如何实现忽略serialNo的compareRobots函数以比较机器人特征

实现忽略serialNo的机器人对象比较函数

需求明确:编写compareRobots函数,接收两个机器人对象,忽略唯一标识serialNo,只要其余所有键值对完全匹配(属性顺序不影响)就返回true,否则返回false。属性值不会是undefined或NaN。

你当前的代码存在两个核心问题:

  • 未排除serialNo属性,会把这个唯一标识纳入比较逻辑
  • 依赖Object.entries的返回顺序,一旦两个对象属性顺序不同就会直接返回false,不符合「属性顺序不影响」的要求

解决方案代码

我们可以通过过滤掉serialNo属性后,再比较剩余键值对的方式实现,以下是两种简洁可靠的写法:

写法一:直接过滤键并验证

const compareRobots = (robot1, robot2) => {
  // 过滤出两个对象中除serialNo外的所有键
  const keys1 = Object.keys(robot1).filter(key => key !== 'serialNo');
  const keys2 = Object.keys(robot2).filter(key => key !== 'serialNo');

  // 键数量不同直接返回false
  if (keys1.length !== keys2.length) return false;

  // 遍历每个键,验证另一个对象是否有相同键且值相等
  for (const key of keys1) {
    if (!robot2.hasOwnProperty(key) || robot1[key] !== robot2[key]) {
      return false;
    }
  }

  return true;
};

写法二:解构删除serialNo后比较

const compareRobots = (robot1, robot2) => {
  // 工具函数:返回去掉serialNo的对象副本
  const stripSerial = (robot) => {
    const { serialNo, ...restProps } = robot;
    return restProps;
  };

  const robot1Clean = stripSerial(robot1);
  const robot2Clean = stripSerial(robot2);

  // 键数量不一致直接返回false
  if (Object.keys(robot1Clean).length !== Object.keys(robot2Clean).length) return false;

  // 遍历验证所有键值对
  for (const [key, value] of Object.entries(robot1Clean)) {
    if (robot2Clean[key] !== value) return false;
  }

  return true;
};

测试验证

用你给出的示例测试,结果完全符合预期:

const charlie = { serialNo: 1, chipVer: 12 };
const lordy = { serialNo: 2, chipVer: 12 };
compareRobots(charlie, lordy); // true

const paul = { serialNo: 3, chipVer: 15 };
compareRobots(paul, charlie); // false

const mike = { serialNo: 4, chipVer: 12, wheels: 1 };
compareRobots(mike, charlie); // false

const max = { serialNo: 5, engineVer: 12 };
compareRobots(max, charlie); // false

const steve = { serialNo: 6 };
compareRobots(steve, charlie); // false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:34:56