用单循环重新排列数组数据

时间:2017-10-06 09:25:33

标签: javascript jquery arrays

我的数组如下:

[{
  data: 3454
  id: 1
  index: 36
  name: "Pension"
}, {
  data: 53453
  id: 0
  index: 36
  name: "Pension"
}, {
  data: 6756
  id: 1
  index: 37
  name: "Pension"
}, {
  data: 453
  id: 2
  index: 37
  name: "Testval"
}, {
  data: 999
  id: 2
  index: 38
  name: "Testval"
}]

如何使用单循环重新排列此数组,如下所示? 我需要重新排列数据,如:

'Pension': {
  0: {
    36: 53453
  }
  1: {
    36: 3454,
    37: 6756
  }
},
'Testval': {
  2: {
    37: 453
  }
},

我试过循环,但它有6-7个循环。我需要做更少的循环。

2 个答案:

答案 0 :(得分:1)

对于非给定对象,您可以使用默认值的单个循环。稍后分配值。

var array = [{ data: 3454, id: 1, index: 36, name: "Pension" }, { data: 53453, id: 0, index: 36, name: "Pension" }, { data: 6756, id: 1, index: 37, name: "Pension" }, { data: 453, id: 2, index: 37, name: "Testval" }, { data: 999, id: 2, index: 38, name: "Testval" }],
    result = {};

array.forEach(function (o) {
    result[o.name] = result[o.name] || {};
    result[o.name][o.id] = result[o.name][o.id] || {};
    result[o.name][o.id][o.index] = o.data;
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

对任意嵌套对象采用更动态的方法。

var array = [{ data: 3454, id: 1, index: 36, name: "Pension" }, { data: 53453, id: 0, index: 36, name: "Pension" }, { data: 6756, id: 1, index: 37, name: "Pension" }, { data: 453, id: 2, index: 37, name: "Testval" }, { data: 999, id: 2, index: 38, name: "Testval" }],
    result = {};

array.forEach(function (o) {
    [o.name, o.id].reduce(function (r, k) {
        return r[k] = r[k] || {};
    }, result)[o.index] = o.data;
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

你可以使用java中的单循环数组来实现这个目的:

  1. 创建一个包含字段索引和数据的类
  2. 将地图创建为地图地图
  3. 迭代一个数组并将值存储在地图中。
  4. 我想这是有效的方法。试试吧。