【发布时间】:2013-01-07 20:48:25
【问题描述】:
【问题讨论】:
-
没有内置的 jQuery 等效项。您可以自己创建一个并分享它。
-
这也是我的答案。
-
我想破解一个 jQuery 替代方案,但很快就灰心了
标签: jquery arrays underscore.js
【问题讨论】:
标签: jquery arrays underscore.js
没有。 jQuery 不是为数据处理而设计的,而是为 DOM、Ajax 和动画而设计的 - 那些 utility functions 和 each、map 或 grep 是内部需要的。
使用下划线,没有错!如果您不想加载整个脚本,您可以轻松地将groupby function from the source 复制到您需要的任何地方。不要忘记添加对其来源的评论。
【讨论】:
这是对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;
}
在这种情况下,使用 HTML name 属性对元素 ($yourElements) 进行分组:
var groupedByName = $yourElements.groupBy(function (obj) {
return $(obj).attr('name');
});
【讨论】:
我用过这个,效果很好
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
【讨论】: