首页 > 解决方案 > 比较两个对象的值和键

问题描述

大家好。

我有

Object A = {
  "a" : "3.1.2",
  "b" : "4.1.1",
  "c" : "3.0.0",
  "y" : "5.0.0"
}

Object B = {
  "a" : "^3.1.2",
  "t" : "^4.1.1",
  "c" : "~2.2.2"
}

我如何检查对象 B 是否获得与对象 A 中相同的键? If the key in Object A === key in Object B,检查该键的值。如果该键的值相同,则不执行任何操作。如果值 from Object A !=== value in Object B,则将其推送到下一个示例中的数组["c@3.0.0"] 如果key in Object A不存在Object B立即将对象 A 中的键和值推送到同一数组["c@3.0.0", "y@5.0.0"]

标签: javascriptobject

解决方案


你可以使用Object.entries(),Array.reduce()来做String.replace()

迭代对象 A 的条目,对于每个条目,检查 B 中是否有条目。如果没有,则将值推送到数组中。如果有条目且版本号相同,则什么也不做,否则,也将其推送到数组中。

要比较版本号,您可以使用正则表达式 ( /^\^|~/) 删除第一个^~在比较值之前。

const A = {
  "a" : "3.1.2",
  "b" : "4.1.1",
  "c" : "3.0.0",
  "y" : "5.0.0"
};

const B = {
  "a" : "^3.1.2",
  "t" : "^4.1.1",
  "c" : "~2.2.2"
};

const result = Object.entries(A).reduce((acc, [key, val]) => {
  const bEntry = B[key] && B[key].replace(/^\^|~/, '');
  return bEntry !== val ? [...acc, `${key}@${val}`] : acc;
}, []);

console.log(result);


推荐阅读