【问题标题】:jQuery equivalent of underscore.js' groupByjQuery 等价于 underscore.js' groupBy
【发布时间】:2013-01-07 20:48:25
【问题描述】:

jQuery 中是否有一个与http://underscorejs.org/#groupBy 等效的内置函数?

有什么解决方法吗?

谢谢

【问题讨论】:

  • 没有内置的 jQuery 等效项。您可以自己创建一个并分享它。
  • 这也是我的答案。
  • 我想破解一个 jQuery 替代方案,但很快就灰心了
  • jquery array group by的可能重复

标签: jquery arrays underscore.js


【解决方案1】:

没有。 jQuery 不是为数据处理而设计的,而是为 DOM、Ajax 和动画而设计的 - 那些 utility functionseachmapgrep 是内部需要的。

使用下划线,没有错!如果您不想加载整个脚本,您可以轻松地将groupby function from the source 复制到您需要的任何地方。不要忘记添加对其来源的评论。

【讨论】:

  • groupby 链接已失效
  • @MPavlak 已修复。
【解决方案2】:

这是对squint's native Javascript answerjQuery改编:

$.fn.groupBy = function(predicate) {
  var $array = $(this),
      grouped = {};

  $.each($array, function (idx, obj) {
    var $obj = $(obj);
        groupKey = predicate($obj);
    if (typeof(grouped[groupKey]) === "undefined") {
      grouped[groupKey] = $();
    }
    grouped[groupKey] = grouped[groupKey].add($obj);
  });

  return grouped;
}

^这将返回 { key_name: jQueryObjects }

的哈希值

在这种情况下,使用 HTML name 属性对元素 ($yourElements) 进行分组

var groupedByName = $yourElements.groupBy(function (obj) {
  return $(obj).attr('name');
});

【讨论】:

    【解决方案3】:

    我用过这个,效果很好

    function groupBy(array, keyOrIterator) {
      var iterator, key;
    
      // use the function passed in, or create one
      if(typeof key !== 'function') {
        key = String(keyOrIterator);
        iterator = function (item) { return item[key]; };
      } else {
        iterator = keyOrIterator;
      }
    
      return array.reduce(function (memo, item) {
        var key = iterator(item);
        memo[key] = memo[key] || [];
        memo[key].push(item);
        return memo;
      }, {});
    }

    来自Link

    【讨论】:

      猜你喜欢
      • 2013-01-05
      • 1970-01-01
      • 2016-11-14
      • 2012-04-18
      • 2010-11-12
      • 2011-06-06
      • 2014-01-04
      • 2011-08-28
      • 1970-01-01
      相关资源
      最近更新 更多