创建原始json以嵌套json对象-javascript

瓦尔达

我从服务器下载的阵列看起来像这样,

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名称/用户/等。

妮娜·斯科茨(Nina Scholz)

该建议使用带有临时对象的单个循环来引用结果数组的数组。

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章