Immutable.js
Playing around with Immutable.js library.
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.7.4/immutable.min.js"></script>
JavaScript
var map1 = Immutable.Map({a:1, b:2, c:3});
var map2 = map1.set('b', 50);
console.log( map1.get('b') ); // 2
console.log( map2.get('b') ); // 50
var clone = map1;
clone.set('b', 30);
console.log( map1.get('b') ); // 2
console.log( clone.get('b') ); // 2, because it is immutable!
var alpha = Immutable.Map({a:1, b:2, c:3, d:4});
var a = alpha.map(function(value, key) {
return key.toUpperCase();
}).join();
console.log(a);// 'A,B,C,D'
var map1 = Immutable.Map({a:1, b:2, c:3, d:4});
var map2 = Immutable.Map({c:10, a:20, t:30});
var obj = {d:100, o:200, g:300};
var map3 = map1.merge(map2, obj);
console.log(map3.toObject()); // { a: 20, b: 2, c: 10, d: 100, t: 30, o: 200, g: 300 }
console.log(map3.toArray()); // [20, 2, 10, 100, 30, 200, 300]
var b = Immutable.Seq({a:1,b:2,c:3}).map(function(x) {
return x * x;
}).toObject();
console.log(b); // { a: 1, b: 4, c: 9 }
var nested = Immutable.fromJS({a:{b:{c:[3,4,5]}}});
console.log(nested); // Map { a: Map { b: Map { c: List [ 3, 4, 5 ] } } }
var nested2 = nested.mergeDeep({a:{b:{d:6}}});
console.log(nested2);
// Map { a: Map { b: Map { c: List [ 3, 4, 5 ], d: 6 } } }