immutable
immutable
by 郭 凡
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>
JavaScript
const {Map, fromJS, is} = Immutable;
function shallowEqualImmutable(objA, objB) {
if (objA === objB || is(objA, objB)) {
return true;
}
if (typeof objA !== "object" || objA === null ||
typeof objB !== "object" || objB === null) {
return false;
}
const keysA = Object.keys(objA);
const keysB = Object.keys(objB);
if (keysA.length !== keysB.length) {
return false;
}
// Test for A's keys different from B.
const bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);
for (let i = 0; i < keysA.length; i++) {
if (!bHasOwnProperty(keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
return false;
}
}
return true;
}
var a = {a:1};
var b = {a:1};
var c = {b:1};
var d = fromJS(c);
var e = fromJS(c);
console.log(shallowEqualImmutable(null, null));
console.log(shallowEqualImmutable(a, b));
console.log(shallowEqualImmutable(a, c));
console.log(shallowEqualImmutable(d, c));
console.log(shallowEqualImmutable(d, e));
console.log(d == e);
let tb = fromJS({
inPool : {
origin : {
name : [
{
age : 18,
sex : "gendle"
}
]
}
}
});
let ctb = tb.setIn(["inPool","origin","name", 0], {hello : "fancy"});
console.dir(ctb.toJS());