2017-10-06 18 views
-2

重新排列數據我有數組這樣的:單迴路

[{ 
 
    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圈。我需要用較少的循環。

+0

家庭作業?分配? –

+1

請花些時間閱讀幫助頁面,尤其是名爲[「我可以詢問什麼主題?」](http://stackoverflow.com/help/on-topic)和[「應該提供哪些類型的問題我避免問?「](http://stackoverflow.com/help/dont-ask)。更重要的是,請閱讀[Stack Overflow問題清單](http://meta.stackexchange.com/q/156810/204922)。您可能還想了解[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –

+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; }

+0

謝謝@nina,我想做同樣的事情。你拯救我的一天:) –

0

可以實現陣列的在Java作爲低於該使用單迴路:

  1. 創建字段索引和數據的類
  2. 創建地圖作爲地圖作爲地圖
  3. 迭代的陣列和存儲地圖中的值。

我想這是有效的方法。嘗試一下。