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());