javascript - 下划线 Javascript 构建频率图

标签 javascript underscore.js

我目前对 JS 和下划线还很陌生。我想查看给定数组中哪个特定数字出现次数最多(现在说 var a )。作为一个狂热的 python 用户,我习惯于在频率电报中对其求和,然后将其输出为元组 [(1, 3), (2, 2), ... ],然后这样排序。

在 javascript 中这样做的最佳方法是什么?

function votesTied() { 
  var a = [1, 2, 3, 1, 2, 4, 6, 1, 7];
  var tele = {};
  _.each(a, function(key) { 
    if (tele[key]) { 
      tele[key]++;
    } else { 
      tele[key] = 1;
    }
  });

  var items = _.map(tele, function(frequency,key) { return [key,frequency]; });
  var results = _.sortBy(items, function(tuple) { return -1 * tuple[1]; }).value(); 

  return results.length > 1 && results[0][1] == results[1][1];
}

我这么问是因为我可以在 1 行 python 中完成所有这些。我相信有一种更优雅的方式可以用下划线或 javascript 来编写它。

最佳答案

不幸的是,underscoremap() 函数无法返回具有已维护属性的对象,因为这会允许类似这样的事情:

var t = _.chain (a)
          .groupBy (function (p) { return p; })
          .map (function (e) { return _.size (e); })
          .value ();

但如果不重写函数以允许这样做,我能想到的最好的办法是:

var t = {};
_.chain (a)
  .groupBy (function (p) { return p; })
  .each (function (e, i) {
    t[i] = _.size (e);
  });

这将收集 t 中的所有内容。

更新

我不能让它这样,所以我检查了 underscoremap() 的源代码,并进行了以下更改以允许上面的第一个代码段:

  _.map = function(obj, iterator, context) {
    // determine the return type
    if (_.isArray (obj)) {
        var results = [];
    }
    else {
        var results = {};
    }
    if (obj == null) return results;
    // @xxx: we need to override the native map(), thus the next line is commented out
    // if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
    each(obj, function(value, index, list) {
      results[index] = iterator.call(context, value, index, list);
    });
    if (obj.length === +obj.length) results.length = obj.length;
    return results;
  };

虽然我还没有彻底检查它,但它应该可以工作。

关于javascript - 下划线 Javascript 构建频率图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8740493/

相关文章:

javascript - Flotr x 轴日期/时间

javascript - 获取按钮的背景图像并更改它

javascript - CSS 有两个列表,同步它们的垂直滚动,同时允许一个列表水平滚动

javascript - Backbone.js - id vs idAttribute vs cid

javascript - 为什么setInterval添加的函数停止执行?

javascript - div 中的搜索值

javascript - 为什么下划线不验证其功能?

javascript - _.findWhere() 等 underscore.js 函数是否同步返回结果?

javascript - 下划线JS : get 5 items per category

javascript - angularJS 文档中的各种术语是什么意思?