P粉4097421422023-08-25 18:44:16
使用Map对象的ES6解决方案:
P粉2983052662023-08-25 15:50:49
这是我为这种情况编写的代码片段。您可以将此功能添加到所有数组中:
Object.defineProperty(Array.prototype, 'group', { enumerable: false, value: function (key) { var map = {}; this.forEach(function (e) { var k = key(e); map[k] = map[k] || []; map[k].push(e); }); return Object.keys(map).map(function (k) { return {key: k, data: map[k]}; }); } });
您可以像这样使用它。您只需传递一个定义如何分组数据的函数。
var newArray = arr.group(function (item) { return item.optionName; });
如果需要,您可以将{key: k, data: map[k]}
替换为{Name: k, Data: map[k]}
。
这也是上面代码的更紧凑的ES6版本:
Object.defineProperty(Array.prototype, 'group', { enumerable: false, value: function (key) { let map = {}; this.map(e => ({k: key(e), d: e})).forEach(e => { map[e.k] = map[e.k] || []; map[e.k].push(e.d); }); return Object.keys(map).map(k => ({key: k, data: map[k]})); } });
像这样使用它:
let newArray = arr.group(item => item.optionName))