我有动作,它将新对象添加到商店中
let warning = {message: 'some text', status: 'suspended'}
this.store.dispatch(new WarningActions.AddWarning(warning))
但是如果我已经有相同的警告,我不想再次添加它,因此我尝试在分派它之前检查存储:
this.store.select('warning').subscribe(warnings => {
console.log(warnings) // [{message: 'some text', status: 'suspended'}]
if (warnings.indexOf(warning) === -1) {
this.store.dispatch(new WarningActions.AddWarning(warning))
}
})
但这是行不通的,因为即使我已经有完全相同的对象,warnings.indexOf(warning) === -1
总是产生true。我做错了什么以及如何解决呢?
答案 0 :(得分:1)
indexOf()
将始终返回-1
,因为它们是两个不同的对象,即使它们看起来相同(即具有相同的属性和值)也不能相等。
您可以使用some
方法来查找属性是否相同。
答案 1 :(得分:1)
您无法以这种方式深入比较Javascript中的对象。无论您做什么,{} === {}
都是false
。您需要手动比较属性。如果您想在JS中进行深度比较,请查看此post。