2017-07-17 88 views
0

目前,我有一個數組下面的格式:轉換扁平陣列嵌套父 - 子格式

[{ 
    key: "a" 
}, { 
    key: "b" 
}, { 
    key: "c" 
}, { 
    key: "d" 
}, { 
    key: "e" 
}] 

數組中的每個元素是在它旁邊元素的父元素。

需要將其轉換爲以下格式:

[{ 
    key: "a", 
    Nodes: [{ 
     key: "b", 
     Nodes: [{ 
      key: "c", 
      Nodes: [{ 
       key: "d", 
       Nodes: [{ 
        key: "e" 
       }] 
      }] 
     }] 
    }] 
}] 

我已經實現了這一點,但我已經實現的邏輯是相當漫長的,現在我想優化代碼。

所以我想知道最優化的方式做到這一點

+2

什麼決定一個對象是否是另一個孩子? – Aron

+2

請向我們顯示您的代碼,以便我們對其進行評論。我們怎麼能不看到它而批評你的方法? –

回答

1

使用Array#reduceRight,使這個簡單的:

const array = [{ 
 
    key: "a" 
 
}, { 
 
    key: "b" 
 
}, { 
 
    key: "c" 
 
}, { 
 
    key: "d" 
 
}, { 
 
    key: "e" 
 
}]; 
 

 

 
const nested = array.reduceRight((Nodes, obj) => { 
 
    if (Nodes) { 
 
    return [Object.assign({}, obj, { Nodes })]; 
 
    } else { 
 
    return [obj]; 
 
    } 
 
}, null); 
 

 
console.log(nested);

+0

這是遠遠好於我的邏輯,謝謝:) – blueMoon

+0

嘿,但Object.assign不支持在Internet Explorer中。你能建議一些其他的解決方法,如果是的話,請相應地更新你的答案 – blueMoon

+0

使用polyfill。試試https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill – Aron