Подтвердить что ты не робот

Получение вложенных значений в Immutable.js

В соответствии с документами здесь: https://facebook.github.io/immutable-js/docs/#/Map/getIn

Я должен иметь возможность получить глубокое вложенное значение, предоставив массив для аргумента keyPath. Это то, что я сделал, но я получаю undefined как возвращаемое значение.

http://jsfiddle.net/srxv4mwu/

var obj = Immutable.Map({categories: {1: 'a', 2: 'b'}});
var output = obj.getIn(['categories', 1]);
alert(output);

Что я делаю неправильно?

4b9b3361

Ответ 1

Карта - это просто набор ключей со значениями. У вас есть карта с ключом categories и значением {1: 'a', 2: 'b'}. Значение не автоматически становится неизменяемой картой только потому, что вы помещаете ее на другую карту.

Теперь функция getIn() будет только "видеть" другие карты Immutable.js. То, что у вас есть, - это обычный объект javascript. Если вы просто хотите получить значение 1, вы можете просто сделать:

var obj = Immutable.Map({categories: {1: 'a', 2: 'b'}});
var output = obj.getIn(["categories"])[1];
alert(output);
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.min.js"></script>

Ответ 2

В коде есть 2 проблемы:

  • Immutable.Map(...) не пересекает параметр, чтобы создать сложный неизменяемый. Для этого вам нужно Immutable.fromJS(...).
  • Как только вы это сделаете, вам нужно использовать строки в getIn(...), поэтому ['categories', '1'] вместо ['categories', 1].

См. рабочая скрипка.