Scala';Javascript中的“toMap”
是否有适合此版本的惯用javascript解决方案:Scala';Javascript中的“toMap”,javascript,angularjs,scala,Javascript,Angularjs,Scala,是否有适合此版本的惯用javascript解决方案: var addTuple = function(map,tuple) { map[tuple[0]] = tuple[1]; return map} 我需要它以更实用的风格重写: angular.module('finance3', []) .factory('currencyConverter', ['$http', function($http) { var rates = {}; //should be future (o
var addTuple = function(map,tuple) { map[tuple[0]] = tuple[1]; return map}
我需要它以更实用的风格重写:
angular.module('finance3', [])
.factory('currencyConverter', ['$http', function($http) {
var rates = {}; //should be future (or some other monad) mapped from $http.sucess, but it's hard to do with Js
var processRate = function(rate) {
return [rate.id.substring(3,6), window.parseFloat(rate.Rate)];
};
var addTuple = function(map,tuple) { map[tuple[0]] = tuple[1]; return map};
$http.jsonp(url).success(function(data) {
rates = data.query.results.rate.map(processRate).reduce(addTuple, {});
});
return rates
}]);
因此,.reduce(addTuple,{})
就像这里的toMap
顺便说一句,PS至少提供了更具反应性(但仍然是非纯功能性)的方法来更新模型。如果您可以使用外部库,则必须将对象转换为二维数组(即,
{key:value}
到[[key:value]]
)和反之亦然
var x = _.pairs({ 'barney': 36, 'fred': 40 });
// [['barney', 36], ['fred', 40]]
var y = _.zipObject(x)
// { 'fred': 30, 'barney': 40 }
您可以将示例改写为
rates = _.zipObject(data.query.results.rate.map(processRate))
可能就是您要查找的内容。@dk14来自文档:提供单个二维数组,例如[key1,value1],[key2,value2]]或两个数组,一个属性名和一个对应值。换句话说,如果你做了。.zipObject([['barney',36],'fred',40]]代码>它按预期工作(如示例所示)单个数组,右:),谢谢。docs的例子让我有点困惑