immutable.js - immutablejs mergeWith 对象但覆盖新列表

标签 immutable.js

我正在将对象合并在一起,但我遇到的一个问题是,当我将一个对象与列表合并时,它不会使用另一个对象,而是将它们组合在一起。有什么办法可以解决这个问题吗?

即。

obj1 = fromJS({name: 'kim', friends: [1,2,3]})
obj2 = fromJS({pet: 'Alex', friends: [4,5,6]})
obj1.mergeWith(obj2)
===> Desired Result
obj3 = fromJS({name: 'kim', pet: 'Alex', friends: [4,5,6]})
===> Actual Result
obj3 = fromJS({name: 'kim', pet: 'Alex', friends: [1,2,3,4,5,6]})

最佳答案

immutable 为您提供了一个 mergeWith 函数,可让您定义如何处理冲突。

export function mergeWithoutList(prev, next){
    if(typeof next == 'object'){
        if(List.isList(prev)){
            return next
        }else{
            return prev.mergeWith(mergeWithoutList, next)
        }
    }
    return next
}

    obj3 = obj1.mergeWith(mergeWithoutList, obj2)
=>
obj3 == fromJS({name: 'kim', pet: 'Alex', friends: [4,5,6]})

关于immutable.js - immutablejs mergeWith 对象但覆盖新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37192616/

相关文章:

javascript - 集合与有序集合

javascript - 如何仅显示项目 map (如果存在)

redux - Redux 状态下的数组列表

javascript - 如何对不可变映射内的项目进行排序(交换)?

javascript - 为 React Component Props 解构 ImmutableJS Map

javascript - 如何获得几个 immutable.js 列表的联合

reactjs - mapStateToProps 必须返回一个对象。相反收到了Map{}?

javascript - 不可变的 js - 创建或更新嵌套在 map 内的列表

javascript - 不可变 JS - 在嵌套映射中获取值

javascript - Redux 的问题 - 从状态添加和删除项目