2016-05-12 4 views
1

オブジェクトを結合していますが、オブジェクトをリストとマージして、どちらか一方を使用せずに結合します。これを回避する方法はありますか?immutablejsオブジェクトをマージすると新しいリストが上書きされます

e。

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]}) 
+0

「mergeWith」は期待どおりに動作しています。あなたの望みは慣習的ではなく、おそらく手動で 'friends'を' obj2.friends'に手動で変更することで簡単にできます。 – hazardous

+0

これはデフォルトの動作ですが、私が記述した機能が必要です – DrivingInsanee

+0

その場合、単にmergedオブジェクトのフレンドリストをsetを使って優先リストで更新してください。 – hazardous

答えて

2

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]}) 
関連する問題