我試圖從多個陣列中編譯一個大圖“檔案夾結構”字典物件,每個陣列都包含檔案夾名稱字串。一些檔案夾/子檔案夾名稱將在陣列之間共享,嵌套字典物件需要反映這一點。
當回圈遍歷每個檔案夾名稱陣列以檢查嵌套字典物件中是否已存在該“結構”時,我似乎無法弄清楚如何考慮以前的檔案夾和共享檔案夾,考慮到可能有任意數量的檔案夾每個陣列。您如何在不手動撰寫無窮無盡的 for 回圈的情況下計算那個任意數字?
這是陣列可能是什么樣子的基本示例:
var test1 = ["sub1", "sub2", "sub3"];
var test2 = ["sub1", "other"];
var test3 = ["sub0", "misc"];
var test4 = ["sub1", "sub2", "proj", "img"];
這是基于上述示例所需的輸出:
var folder_structure = {
"sub0": {
"misc": {}
},
"sub1": {
"sub2": {
"sub3": {},
"proj": {
"img": {}
}
},
"other": {}
},
};
uj5u.com熱心網友回復:
嗯,你可以通過多種方式做到這一點。這是我基于遞回的解決方案:
var test1 = ["sub1", "sub2", "sub3"];
var test2 = ["sub1", "other"];
var test3 = ["sub0", "misc"];
var test4 = ["sub1", "sub2", "proj", "img"];
const arrays = [test1, test2, test3, test4]; // just organizing all together
const addFolders = (root, folders) => {
// let the base case for recursion be an empty folders array
if (!folders.length) return root;
const curFolderName = folders[0];
const newFolder = root[curFolderName] || {};
root[curFolderName] = newFolder;
// recursive call:
return addFolders(root[curFolderName], folders.slice(1));
}
// here you can also use an empty object as temp
// result-storage and a simple for or forEach loop
// instead of reduce method (up to your taste).
const result = arrays.reduce((acc, folders) => addFolders(acc, folders) && acc, {})
console.dir(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/334493.html
標籤:javascript 数组 字典 目的 嵌套
下一篇:字典用嵌套值更新所有鍵
