ssp*_*oss 35 javascript immutability
我从对象列表中创建了一个不可变的映射(使用Immutable-JS):
var result = [{'id': 2}, {'id': 4}];
var map = Immutable.fromJS(result);
Run Code Online (Sandbox Code Playgroud)
现在我想得到对象id = 4.
有没有比这更简单的方法:
var object = map.filter(function(obj){
return obj.get('id') === 4
}).first();
Run Code Online (Sandbox Code Playgroud)
blg*_*lgt 53
本质上,不是:您按值而不是索引执行列表查找,因此它始终是线性遍历.
改进将是使用find而不是filter:
var result = map.find(function(obj){return obj.get('id') === 4;});
Run Code Online (Sandbox Code Playgroud)
Jos*_*hua 13
首先要注意的是,您实际上并没有创建地图,而是创建了一个列表:
var result = [{'id': 2}, {'id': 4}];
var map = Immutable.fromJS(result);
Immutable.Map.isMap(map); // false
Immutable.List.isList(map); // true
Run Code Online (Sandbox Code Playgroud)
为了创建地图,您可以reviver在toJS调用中使用参数(docs),但它肯定不是最直观的api,或者您可以执行以下操作:
// lets use letters rather than numbers as numbers get coerced to strings anyway
var result = [{'id': 'a'}, {'id': 'b'}];
var map = Immutable.Map(result.reduce(function(previous, current) {
previous[ current.id ] = current;
return previous;
}, {}));
Immutable.Map.isMap(map); // true
Run Code Online (Sandbox Code Playgroud)
现在我们有一个适当的Immutable.js地图,它有一个get方法
var item = Map.get('a'); // {id: 'a'}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46262 次 |
| 最近记录: |