【发布时间】:2018-12-20 08:59:21
【问题描述】:
我有这样的模型:
class Model {
from: number;
values: { [id: string]: number };
originalValues: { [id: string]: number };
}
然后我创建arr = Model[] = [];
我需要检查值是否与 originalValues 匹配,我就是这样做的:
for (let edited of this.arr) {
edited.model.forEach(m => {
if (Object.values(m.originalValues) == Object.values(m.values)) {
// console.log(equal);
} else {
// not equal
}
});
但即使它们相等,我总是得到not equal。
值和原始值的示例:
originalValues: {11c33aaaaaaaaasafsdf33: 23.5}
我在这里做错了什么?
【问题讨论】:
-
您在比较数组引用,而不是数组内容。
-
Object.values将只获取值,而不是键,因此如果缺少键,则控制将丢失。此外,由于看起来您正在使用primitives,您可能会找到更快的方法。现在最大的问题是您正在比较 array references 而不是 values,因此引用永远不会相同,特别是在这种情况下。看看这个:stackoverflow.com/questions/1068834/…。此外,键和值是否总是以相同的顺序? -
也许尝试使用
JSON.stringify将值转换为字符串,然后比较字符串?
标签: javascript typescript dictionary compare