2016-05-18 44 views
-2

如何,我們只能轉換「項目」(對象類型)鍵數組類型:轉換單獨的數組深鍵所需的類型(數組或對象)

var arr = [{ 
    "title": "Custom title", 
    "id": "id1", 
    "icon": "fa fa-reorder", 
    "other": { 
    "3991": { 
     "title": "Some title", 
     "link": "#", 
     "icon": "", 
     "items": { 
     "3992": { 
      "title": "Some title", 
      "link": "#", 
      "icon": "" 
     } 
     } 
    }, 
    "3993": { 
     "title": "Some title", 
     "link": "#", 
     "icon": "" 
    } 
    } 
}]; 

要:

var arr = [{ 
    "title": "Custom title", 
    "id": "id1", 
    "icon": "fa fa-reorder", 
    "other": { 
    "3991": { 
     "title": "Some title", 
     "link": "#", 
     "icon": "", 
     "items": [{ 
      "title": "Some title", 
      "link": "#", 
      "icon": "" 
     }] 
    }, 
    "3993": { 
     "title": "Some title", 
     "link": "#", 
     "icon": "" 
    } 
    } 
}]; 

我需要每隔一段時間對什麼類型的指定鍵進行選擇。我搜索了一些數組步行者,但沒有成功。

例子:

var newArr = change_key_type({ 
'arr' : arr, 
'key' : 'items', 
'type' : 'array' 
}); 

回答

0

你可以在迭代,並建立所有items一個新的陣列。

function walk(a) { 
 
    typeof a === 'object' && Object.keys(a).forEach(function (k) { 
 
     if (k === 'items' && typeof a.items === 'object') { 
 
      a.items = Object.keys(a.items).map(function (k) { 
 
       walk(a.items[k]); 
 
       return a.items[k]; 
 
      }); 
 
      return; 
 
     } 
 
     walk(a[k]); 
 
    }); 
 
} 
 

 
var arr = [{ "title": "Custom title", "id": "id1", "icon": "fa fa-reorder", "other": { "3991": { "title": "Some title", "link": "#", "icon": "", "items": { "3992": { "title": "Some title", "link": "#", "icon": "" } } }, "3993": { "title": "Some title", "link": "#", "icon": "" } } }]; 
 

 
arr.forEach(walk); 
 
document.write('<pre>' + JSON.stringify(arr, 0, 4) + '</pre>');

+0

感謝新思路。但是當項目密鑰不存在於第一級時,那麼步行過程將停止... – Vital

+0

是的,您的數據結構意味着這一點。 –

+0

主要存在的問題就在此。也許你有一些想法如何解決它? – Vital