Persistent Data Structures
/**
* class :: Object a
* change :: String -> any -> Object a
*/
Object.prototype.change = function(path, value) {
if (path.length === 0) {
return value;
} else {
let _this = Object.assign({}, this);
let pathParts = path.split('.');
_this[pathParts[0]] = _this[pathParts[0]].change(pathParts.slice(1).join('.'), value);
return _this;
}
}
let s1 = { a: 1 };
let s2 = s1.change('a', 2);
let s3 = {
a: {
b: 2
}
}
let s4 = s3.change('a.b', 3);
let s5 = {
a: {
b: {
c: 2
},
d: {
e: 2
}
}
}
let s6 = s5.change('a.b.c', 3);
no comments