javascript – 按数组分组并在主数组中添加字段和子数组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 按数组分组并在主数组中添加字段和子数组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1707字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 按数组分组并在主数组中添加字段和子数组](/upload/InfoBanner/zyjiaocheng/707/f112ed3ee6754436910b87de65e64556.jpg)
我有这样一个沉重的阵列:
[
{Id: 1, Name: 'Red', optionName: 'Color'},
{Id: 2, Name: 'Yellow', optionName: 'Color'},
{Id: 3, Name: 'Blue', optionName: 'Color'},
{Id: 4, Name: 'Green', optionName: 'Color'},
{Id: 7, Name: 'Black', optionName: 'Color'},
{Id: 8, Name: 'S', optionName: 'Size'},
{Id: 11, Name: 'M', optionName: 'Size'},
{Id: 12, Name: 'L', optionName: 'Size'},
{Id: 13, Name: 'XL', optionName: 'Size'},
{Id: 14, Name: 'XXL', optionName: 'Size'}
]
我需要做的是按optionName对它们进行分组,并在主数组中有两行,如下所示:
[
{
Name: 'Color',
Data:[{Id: 1, Name: 'Red'},
{Id: 2, Name: 'Yellow'},
{Id: 3, Name: 'Blue'},
{Id: 4, Name: 'Green'},
{Id: 7, Name: 'Black'}]
}, {
Name: 'Size',
Data:[{Id: 8, Name: 'S'},
{Id: 11, Name: 'M'},
{Id: 12, Name: 'L'},
{Id: 13, Name: 'XL'},
{Id: 14, Name: 'XXL'}]
}
]
怎么在javascript中做到这一点?
解决方法:
这是我为这种情况写的片段.您可以将此功能添加到所有阵列:
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;
});
如果需要,可以用{Name:k,Data:map [k]}替换{key: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))
内容总结
以上是互联网集市为您收集整理的javascript – 按数组分组并在主数组中添加字段和子数组全部内容,希望文章能够帮你解决javascript – 按数组分组并在主数组中添加字段和子数组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。