我从服务器下载的阵列看起来像这样,
array=[ { icon: 'm-warning',
color: '#FDC204',
name: 'exp1',
team: 'c',
user: 'alpha' },
{ icon: 'm-puzzle',
color: '#86AF45',
name: 'exp2',
team: 'c',
user: 'alpha' },
{ icon: 'm-refresh',
color: '#77A746',
name: 'exp3',
team: 'c',
user: 'alpha' },
{ icon: 'm-puzzle',
color: '#86AF45',
name: 'exp3',
team: 'a',
user: 'beta' },
{ icon: 'm-clock',
color: '#4677A7',
name: 'exp4',
team: 'b',
user: 'beta' },
{ icon: 'm-warning',
color: '#FDC204',
name: 'exp5',
team: 'a',
user: 'gamma' } ]
如果我需要从上述数组创建一个嵌套对象(exps#,属于各个团队,由用户组织),我将如何处理。我得到的嵌套对象shud看起来像这样,(注意alpha有3个exp属于团队c),依此类推,依此类推
[{
id: 'gamma',
data: [
['a', 1]
]
},
{
id: 'beta',
data: [
['a', 1],
['b', 1]
]
},
{
id: 'alpha',
data: [
['c', 3]
]
}]
传统上,您可以使用几个for循环来完成此操作。但是有没有更简单的方法来减少for循环周期并创建它。需要注意的是,这必须是严格的JS,我不知道可能有多少用户/团队/经验。可能有50个不同的用户/ 1000个不同的实验。所以我不能硬编码任何exp名称/用户/等。
该建议使用带有临时对象的单个循环来引用结果数组的数组。
var array = [{ icon: 'm-warning', color: '#FDC204', name: 'exp1', team: 'c', user: 'alpha' }, { icon: 'm-puzzle', color: '#86AF45', name: 'exp2', team: 'c', user: 'alpha' }, { icon: 'm-refresh', color: '#77A746', name: 'exp3', team: 'c', user: 'alpha' }, { icon: 'm-puzzle', color: '#86AF45', name: 'exp3', team: 'a', user: 'beta' }, { icon: 'm-clock', color: '#4677A7', name: 'exp4', team: 'b', user: 'beta' }, { icon: 'm-warning', color: '#FDC204', name: 'exp5', team: 'a', user: 'gamma' }],
grouped = function (array) {
var o = {}, r = [];
array.forEach(function (a) {
if (!(a.user in o)) {
o[a.user] = { _: { id: a.user, data: [] } };
r.push(o[a.user]._);
}
if (!(a.team in o[a.user])) {
o[a.user][a.team] = [a.team, 0];
o[a.user]._.data.push(o[a.user][a.team]);
}
o[a.user][a.team][1]++;
});
return r;
}(array);
document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句