5

jQuery 中是否有相当于http://underscorejs.org/#groupBy的内置函数?

任何解决方法?

谢谢

4

3 回答 3

7

不。jQuery 不是为数据处理而设计的,而是为 DOM、Ajax 和 Animations 设计的——这些实用程序功能,或者内部需要each的功能很糟糕。mapgrep

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

于 2013-01-07T20:51:24.437 回答
2

这是squint 的原生 Javascript 答案的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属性对元素 ( ) 进行分组$yourElementsname

var groupedByName = $yourElements.groupBy(function (obj) {
  return $(obj).attr('name');
});
于 2015-07-31T17:37:32.243 回答
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;
  }, {});
}

来自链接

于 2020-01-22T09:18:23.270 回答