Как получить разницу между двумя неизменяемыми картами?

#javascript #frontend #immutability

#javascript #интерфейс #неизменность

Вопрос:

У меня есть две неизменяемые карты:

 const first = immutable.Map({ one: 1, two: 2 });
const two = immutable.Map({ one: 1, two: 2, three: 3 });
  

Как получить разницу?
Я должен получить:

 { three: 3 } // Map because need merge this data in the feature
  

Комментарии:

1. Если это плоский объект, я думаю, вы можете получить ключи в виде списка, тогда легко получить разницу, которая вернет вам ключи, которые присутствуют только в одном из объектов, затем вы повторяете этот список, чтобы сгенерировать новый объект, получающий значения

Ответ №1:

В неизменяемом 4.0.0-rc.12 вы можете сделать

 const first = Immutable.Map({ one: 1, two: 2 });
const two = Immutable.Map({ one: 1, two: 2, three: 3 });
console.log(two.deleteAll(first.keys()).toJS())
  

для достижения аналогичного результата
deleteAll в версии 3 этого не было, поэтому, я думаю, вы можете создавать наборы из ключей maps и пересекать их

 const m1 = new Immutable.Map({foo: 2, bar: 42});
const m2 = new Immutable.Map({foo: 2, bar: 42, buz: 44});


const s1 = Immutable.Set(m1.keys());
const s2 = Immutable.Set(m2.keys());

const s3 = s2.subtract(s1);
const tmp = {};
for (let key of s3.keys()) {
  tmp[key] = m2.get(key);
}

const res = new Immutable.Map(tmp);
console.log(res.toJS());