javascript - 在 Immutable.js 中获取嵌套值

标签 javascript 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);

我做错了什么?

最佳答案

映射只是具有值的键的集合。您所拥有的是一个包含键 categories 和值 {1: 'a', 2: 'b'} 的 map 。该值不会因为您将它放在另一个映射中而自动成为不可变映射。

现在,getIn() 函数只会“看到”其他 Immutable.js 映射。您拥有的是一个常规的 ol' 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>

如果您希望categories 集合也是一个 map ,您必须明确定义它。此外,正如 Amit 指出的那样,您需要将字符串与 getIn() 函数一起使用。

var obj = Immutable.Map({
	categories: Immutable.Map({
		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>

以上代码将返回'a'

如果您有许多嵌套 map ,您可能会更方便地执行以下操作。

var obj = Immutable.fromJS({
	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>

fromJs() 函数会自动将任何嵌套对象转换为 map 或列表。

关于javascript - 在 Immutable.js 中获取嵌套值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33910300/

相关文章:

javascript - 如何在类似 Om 的不可变应用程序状态中对关系数据建模

javascript - 如何使用javascript访问对象数组

javascript - Bootstrap 轮播如何从 xs 大小的 slider 隐藏一项?

javascript - Node.js - 禁用浏览器的 Javascript

javascript - 不可变的 js - 创建或更新嵌套在 map 内的列表

javascript - Immutable.js 不复制对象

javascript - 不可变的 .toArray() 不会渲染数据 - ReactJS

arrays - 如何循环像forEach这样的不可变列表?

javascript - 如何在不删除数组其余部分的情况下从 React 状态数组中删除组件?

javascript - 根据弹出窗口中单击的按钮返回 true 或 false