【发布时间】:2012-04-18 19:30:03
【问题描述】:
使用 Underscore.js,我正在尝试多次对项目列表进行分组,即
按 SIZE 分组,然后对每个 SIZE,按 CATEGORY 分组...
http://jsfiddle.net/rickysullivan/WTtXP/1/
理想情况下,我希望有一个函数或扩展_.groupBy(),这样您就可以向它抛出一个数组,其中包含要分组的参数。
var multiGroup = ['size', 'category'];
大概可以做一个mixin...
_.mixin({
groupByMulti: function(obj, val, arr) {
var result = {};
var iterator = typeof val == 'function' ? val : function(obj) {
return obj[val];
};
_.each(arr, function(arrvalue, arrIndex) {
_.each(obj, function(value, objIndex) {
var key = iterator(value, objIndex);
var arrresults = obj[objIndex][arrvalue];
if (_.has(value, arrvalue))
(result[arrIndex] || (result[arrIndex] = [])).push(value);
我的头很痛,但我认为这里需要进一步推动......
});
})
return result;
}
});
properties = _.groupByMulti(properties, function(item) {
var testVal = item["size"];
if (parseFloat(testVal)) {
testVal = parseFloat(item["size"])
}
return testVal
}, multiGroup);
【问题讨论】:
-
输入和所需输出的示例可能会有所帮助...
-
输入在顶部,输出如下...jsfiddle.net/rickysullivan/G9sd6
-
其实这个版本...jsfiddle.net/rickysullivan/G9sd6/1
-
val应该做什么?你说你会传递一个字符串数组(或函数,我不介意)
标签: arrays underscore.js javascript-objects