jQuery相当于underscore.js'groupBy

时间:2013-01-07 20:48:25

标签: jquery arrays underscore.js

jQuery中是否有内置函数,其功能相当于http://underscorejs.org/#groupBy

有任何解决方法吗?

由于

3 个答案:

答案 0 :(得分:7)

没有。 jQuery不是用于数据处理,而是用于DOM,Ajax和动画 - 那些内部需要的each mapgrep或{{1}}。

使用Underscore,它没有任何问题!如果您不想加载整个脚本,可以轻松地将utility functions复制到您需要的任何位置。不要忘记在其来源上添加评论。

答案 1 :(得分:2)

以下是squint's native Javascript answer jQuery 改编:

$.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 $yourElements属性 分组元素(name):

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

答案 2 :(得分:0)

我已经使用了它,它对我来说很完美

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