2016-03-03 52 views
1

分配多維數組元素我想快速分配是這樣的:以簡單的方式

obj = {}; 
obj["train-11456"]["2016-12-11" ]["chair car"] = 'waitlisted'; 

所有這些因素都是對象。

我們可以在PHP中做到這一點,它會自動創建它們。

這樣指定最簡單的方法是什麼?

更長的路是:

obj["train-11456"] = {} //only if this key does not already exist 
obj["train-11456"]["2016-12-11" ] = {}; //only if this key does not alreadu exist 
obj["train-11456"]["2016-12-11" ]["chair car"] = 'waitlisted'; 
+0

你不能在JavaScript這樣做直接作爲陣列(這是什麼括號[]表示)只能有數字索引。這是OO語言(ish),所以你必須處理對象。 –

回答

3

你可以這樣做

obj = { 
    "train-11456": { 
     "2016-12-11": { 
      "chair car" : "waitlisted" 
     } 
    } 
}; 

OR

obj = {"train-11456":{"2016-12-11":{"chair car":"waitlisted"}}}; 
+0

太多的大括號使其難以管理 – user5858

+0

obj [「train-11456」] [「2016-12-11」] [「chair car」]我感覺到的區別在於,花括號代替方括號並且在結束而不是立即。如果你看到大括號和方括號的數目是相同的。 – Siva

+0

也會丟棄較早的對象數據。用處不大。 – user5858

2

那麼有沒有直接的方法來做到這一點。但是你可以寫一個實用函數來爲你做。它的種類速記

function objUtil (obj) { 
    var _o = obj || {}; 

    return function() { 
     var args = [].slice.call(arguments, 0), 
      val = args.splice(args.length - 1, 1)[0], 
      res = {}, 
      index, length, key, objPointer, lastObjPtr; 

     objPointer = _o; 

     for (index = 0, length = args.length; index < length; index ++) { 
      key = args[index]; 
      lastObjPtr = objPointer; 
      objPointer = objPointer[key] = {}; 
     } 

     lastObjPtr[key] = val; 
     return _o; 
    } 
} 

然後調用它像

var obj, 
    populateObj = objUtil(obj={}); 

populateObj('train-11456', '2016-12-11', 'chair car', 'waitlisted'); 
console.log(obj);