javascript - 比较两个对象的值和键
问题描述
大家好。
我有
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"]
解决方案
你可以使用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);
推荐阅读
- python - 确定一个值是否超过另一个值的函数
- java - 我想在集合的所有文档中保存相同的字符串
- javascript - 通过 Cloud Functions 删除整个集合
- mysql - 默认情况下,所有 knex 查询都在事务中运行吗?
- c-preprocessor - 在预处理器 if 语句中定义 C 宏
- csv - plotly dash:如何获取 csv 的标题作为下拉选项
- jquery - 在 CoffeeScript 范围内更改变量值
- html - 使用 iFrame 无法显示嵌入的网页
- spotfire - Spotfire:如果子值之一为空,如何使给定 ID 的所有值都为空
- oracle - Oracle 函数返回列表