ngrx:在分派操作之前检查是否存储已具有相同的对象

时间:2019-08-12 19:26:48

标签: angular rxjs ngrx

我有动作,它将新对象添加到商店中

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。我做错了什么以及如何解决呢?

2 个答案:

答案 0 :(得分:1)

indexOf()将始终返回-1,因为它们是两个不同的对象,即使它们看起来相同(即具有相同的属性和值)也不能相等。

您可以使用some方法来查找属性是否相同。

答案 1 :(得分:1)

您无法以这种方式深入比较Javascript中的对象。无论您做什么,{} === {}都是false。您需要手动比较属性。如果您想在JS中进行深度比较,请查看此post