2014-09-10 120 views
0

假設我有一個未知字符串數組,例如:填充多維對象具有未知字符串數組

arr = [fruit/bananas:10, fruit/apples/0:5, fruit/apples/1:8, fruit/apples/2:7, car/honda/civic:1]; 

和欲填充的對象,使得每個陣列值是它的對象值的路徑(即ARR變得低於OBJ):

obj = { 
     'fruits' :{ 
       'bananas' : 10, 
       'apples' : [5,8,7] 
     }, 
     'car' :{ 
       'honda':{ 
         'civic': 1 
       } 
     } 
}; 

我只是想知道什麼類型的遞歸函數的將是最好的,因爲每個值的實際數組的長度是不明所以,只是分裂「/」和填充是行不通的(即我可以算出來)

+0

每個遞歸可以寫成一個循環(在這種情況下,即使是用處不大的)。你有什麼嘗試?請向我們展示您的嘗試(將該代碼添加到帖子中)。 – Bergi 2014-09-10 18:25:25

回答

0

試試這個:

var arr = ['fruit/bananas:10', 'fruit/apples/0:5', 'fruit/apples/1:8', 'fruit/apples/2:7', 'car/honda/civic:1']; 

function createObject(array) { 
    var out = {}; 
    array.forEach(function(value) { 
     var current = out, 
      last = current, 
      data = value.split(':'), 
      keys = data[0].split('/'), 
      lastKey = keys.pop(); 

     keys.forEach(function(key) { 
      if(!current[key]) { 
       current[key] = {}; 
      } 
      last = current; 
      current = current[key]; 
     }); 
     if(lastKey === '0') { 
      current = last[keys.pop()] = []; 
     } 
     current[lastKey] = +data[1]; 
    }); 
    return out; 
} 

console.log(createObject(arr)); 

這裏是jsfiddle-demo