Получение вложенных значений в 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);
Что я делаю неправильно?
Ответы
Ответ 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]
.
См. рабочая скрипка.