获取 Immutable.js 中的嵌套值
Getting nested values in Immutable.js
根据此处的文档:https://facebook.github.io/immutable-js/docs/#/Map/getIn
我应该能够通过为 keyPath
参数提供一个数组来获得深层嵌套的值。这就是我所做的,但是我得到 undefined
作为 return 值。
var obj = Immutable.Map({categories: {1: 'a', 2: 'b'}});
var output = obj.getIn(['categories', 1]);
alert(output);
我做错了什么?
映射只是具有值的键的集合。您拥有的是一个带有键 categories
和值 {1: 'a', 2: 'b'}
的映射。该值不会因为您将它放在另一个映射中而自动成为不可变映射。
现在,getIn()
函数只会 "see" 其他 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
集合也是地图,则必须明确定义它。此外,正如 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>
以上代码将return'a'
.
如果你有很多嵌套的地图,你做下面的事情可能会更方便。
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()
函数会自动为您将任何嵌套对象转换为地图或列表。
您的代码有 2 个问题:
Immutable.Map(...)
不遍历参数来创建复杂的不可变。为此你需要 Immutable.fromJS(...)
.
- 完成后,您需要在
getIn(...)
中使用字符串,因此 ['categories', '1']
而不是 ['categories', 1]
。
根据此处的文档:https://facebook.github.io/immutable-js/docs/#/Map/getIn
我应该能够通过为 keyPath
参数提供一个数组来获得深层嵌套的值。这就是我所做的,但是我得到 undefined
作为 return 值。
var obj = Immutable.Map({categories: {1: 'a', 2: 'b'}});
var output = obj.getIn(['categories', 1]);
alert(output);
我做错了什么?
映射只是具有值的键的集合。您拥有的是一个带有键 categories
和值 {1: 'a', 2: 'b'}
的映射。该值不会因为您将它放在另一个映射中而自动成为不可变映射。
现在,getIn()
函数只会 "see" 其他 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
集合也是地图,则必须明确定义它。此外,正如 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>
以上代码将return'a'
.
如果你有很多嵌套的地图,你做下面的事情可能会更方便。
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()
函数会自动为您将任何嵌套对象转换为地图或列表。
您的代码有 2 个问题:
Immutable.Map(...)
不遍历参数来创建复杂的不可变。为此你需要Immutable.fromJS(...)
.- 完成后,您需要在
getIn(...)
中使用字符串,因此['categories', '1']
而不是['categories', 1]
。