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

时间:2016-05-19 09:55:31

标签: immutable.js

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

使用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),但由于可能的数量属性不同,所以它不会工作。有没有办法===检查一个属性?或者任何方式做到这一点,而不必遍历每个属性(除了数量),看看它们是否相同?

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

1 个答案:

答案 0 :(得分:1)

这应该有用 -

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

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

PS:请忽略代码格式,我在SO应用程序。

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