javascript - 在 TS 中比较两个具有指定键的对象
问题描述
我正在尝试比较两个对象,但仅使用三个键而不是所有键。它看起来像这样:
Object.keys(StateA)
.filter((k) => [k == 'name', 'x', 'y'])
.every((k) => StateA[k] == StateB[k])
)
我得到错误的结果;我做错了什么?
解决方案
如果您事先已经拥有/知道要比较的密钥,则无需过滤密钥;照原样使用every
:
const A = { a: 0, b: 1, c: 2, x: 3, y: 4, z: 5 };
const B = { a: 0, b: 2, c: 3, x: 3, y: 4, z: 6 };
const match = ['a', 'x', 'y'].every(key => A[key] === B[key]);
console.log(match);
请记住,像这样的简单检查可能会给您带来误报——这取决于您想要什么。一种情况是一个对象中缺少一个键,但另一个对象中存在键undefined
。如果是这种情况,您可能还需要检查密钥是否存在:
const A = { a: 0, b: 1, c: undefined };
const B = { a: 0, b: 1 };
const keys = ['a', 'b', 'c'];
const match = keys.every(key => A[key] === B[key]);
console.log(match); // true
const stricterMatch = keys.every(key => (
key in A && key in B && A[key] === B[key]
));
console.log(stricterMatch); // false
推荐阅读
- ios - 如何使 UIScrollView 更长?
- android - android意图在android 11中打开谷歌地图不起作用
- html - ImportError:无法从“flask_login”导入名称“app”
- python - Python spinbox没有获得价值
- java - 无法在 Libgdx 中创建多维数据集
- javascript - 将 JavaScript 转换为 TypeScript 时的笑话错误
- performance - CrmServiceClient - 性能问题
- java - OkHttp Post MediaType 解析
- max - 在 DataFrame 中查找某些行的最小值和最大值
- c - Arduino中是否有任何函数可以访问数组的最后一个元素