如何联合到对象的immutable.js列表(带有ID属性)

时间:2018-11-10 13:14:45

标签: javascript immutable.js

我想在不可变列表中替换/添加新值:

const old = [
  { id: 1, value: 'foo' },
  { id: 3, value: 'bar' },
  { id: 2, value: 'baz' },
]

const new = [
    { id: 1, value: 'quux' }, // update
    { id: 4, value: 'asd' }, // push

]

union == [
  { id: 1, value: 'quux' }, // updated 
  { id: 3, value: 'bar' },
  { id: 2, value: 'baz' },
  { id: 4, value: 'asd' }, // new
]

如果列表不具有此功能,但某些东西具有功能,则我可以使用任何数据类型

如果这不是在immutable.js中内置的,那就这么说,我已经为此编写了一个脚本,只是缺少了内置方法

1 个答案:

答案 0 :(得分:0)

联合算法

首先,您必须维护两个映射,键分别为id和值分别为object,然后检查较大尺寸的数组的长度,然后将较小尺寸映射的较大尺寸的数组传递给{{ 1}}函数,您可以遍历数组并检查是否在地图中存在(如果是),然后更新对象并从地图中删除该行,否则将对象添加到输出中。在for循环完成之后,检查map是否存在元素,然后将map中的所有值推入输出数组并返回;

index.js

merged

正在工作的jsFiddle演示-https://jsfiddle.net/qz25hnmf/