ImmutableJS在Map中进行了深入比较

时间:2017-03-16 10:31:09

标签: javascript immutable.js

我有两个深度嵌套的数据对象,例如:

myMap.get("dataKey") === maybeNewData // false
Immutable.is(myMap.get("dataKey"), maybeNewData) //maybe true

仅当某些嵌套值发生更改时,我才想用maybeNewData替换myMap.get(" dataKey")。有没有语法上精确的方法来做到这一点?例如(方法不存在):

const maybeNewMap = myMap.setIfDeepDifferent("dataKey", maybeNewData);

或者我必须这样做吗?:

if (!Immutable.is(myMap.get("dataKey"), maybeNewData)) {
  maybeNewMap = myMap.set("dataKey", maybeNewData);
}

1 个答案:

答案 0 :(得分:0)

我找到了一个稍好的解决方案:使用update.is检查提供了一个位置:

const maybeNewMap = myMap.update("dataKey", (data) => {
  return !Immutable.is(data, maybeNewData) ? maybeNewData : data;
});

如果有更简洁的表达方式,我仍然很好奇。