Scala's `toMap` in Javascript

Scala's `toMap` in Javascript

本文关键字:toMap Javascript in Scala      更新时间:2023-12-05

是否有任何惯用的javascript解决方案:

var addTuple = function(map,tuple) { map[tuple[0]] = tuple[1]; return map}

我需要它以更实用的风格重写这个例子(请参阅finance3.js):

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一样。

附言:顺便说一句,KnockoutJs至少提供了更被动(但仍然是非纯功能)的方式来更新模型。

如果可以使用外部库,则lodash有_.pairs_.zipObject将对象转换为二维数组(即{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))