ImmutableJs - 比较对象,但只比较一个 属性

ImmutableJs - compare objects but for one property

我正在将购物篮转换为不可变结构。

是否有一种使用 immutablejs 的简单方法来查看不可变对象是否已存在于不可变列表中,除了一个对象 属性 'quantity' 可能不同?列表示例:

[{
  id: 1,
  name: 'fish and chips',
  modifiers: [
    {
      id: 'mod1',
      name: 'Extra chips'
    }
  ],
  quantity: 2
},{
  id: 2,
  name: 'burger and chips',
  modifiers: [
    {
      id: 'mod1',
      name: 'No salad'
    }
  ],
  quantity: 1
}]

现在,假设我有另一个对象要放入列表中。但是我想检查这个带有修饰符的确切项目是否已经存在于列表中?我可以只做 list.findIndex(item => item === newItem) 但由于可能的数量不同 属性 然后它不会工作。除了一个 属性 之外,有没有办法 === 检查?或者有什么方法可以做到这一点而不必遍历每个 属性(除了数量)来查看它们是否相同?

目前,我有一个可怕的嵌套循环来遍历每个项目并检查每个 属性 以查看它们是否相同。

嗯,这应该行得通-

list.findIndex(item => item.delete("quantity").equals(newItem.delete("quantity"))

equals 方法进行深度值比较。因此,一旦您删除了数量,您就在比较所有重要的值。

PS: 请忽略代码格式,我在 SO app.

PPS: 上面的代码不是最优的,你应该在箭头函数中比较一个预先修剪过的newItem,而不是在那里修剪它。