2013-02-19 61 views
2

我來自PHP工作了很多年,並且無法在JS中爲整數IDed對象創建一些更復雜的數據結構。我需要構建一個對象來存儲這些更簡單的對象,這些對象按照它們的整數ID分層鍵入。所以,如果我有以下objectes每個都有一個唯一的整數ID:如何在JavaScript中存儲整數索引數據?

部分,成分,項目進入

在PHP中我會做類似

$arr[$section_id][$element_id][$item_id][$entry_id] = $entry; 

在javascript中,這並不工作。我知道我可以在技術上將這些ID包含在引號中以強制它,但這似乎是一個糟糕的主意。同樣,我可以創建一個對象,並使用引用的整數方法,但又似乎很難。

現在我正在將數據存儲在普通整數索引數組中,然後使用caolan的異步檢測按ID查找特定成員。這工作,但似乎非常混亂與PHP相當。我希望有一個更清晰的方式來在JS中做到這一點。

TIA!

+0

如果下一個屬性存在並且根據需要創建它,那麼在每個嵌套級別檢查並不是很困難......如果不理解用例,則很難回答問題 – charlietfl 2013-02-19 03:13:26

+0

json對象{}可以充當關聯的鍵/對關聯 – 2013-02-19 03:13:57

+0

你能否至少提供一個示例JSON數據? – Passerby 2013-02-19 03:14:46

回答

0

因爲JavaScript不能保存字符串索引的數組,我使用這些:

var namespace = function(name, separator, container){ 
    var ns = name.split(separator || '.') 
    , o = container || window 
    , i = 0; 
    while (i++ < ns.length) o = o[ns[i - 1]] = o[ns[i - 1]] || {}; 
    return o; 
} 

namespace(arr + '.' + section_id + '.' + element_id + '.' + item_id + '.' + entry_id) = entry; 
// ex : namespace('arr.1.3.2.6') will product arr.1.3.2.6 object 
+0

不完全正確。對象只是關聯數組。事實上,這將運行得很好。 http://jsfiddle.net/tomprogramming/5xYRw/ – 2013-02-19 03:25:55

0

這是有點難看,但它會讓你很接近你想要什麼。

您可以添加一個方法給JavaScript Array類,像這樣:

Array.prototype.g = function(index) { 
    if (this[index] == undefined) { 
     this[index] = []; 
    } 
    return this[index]; 
} 

然後,設置一些你這樣做:

var test = []; 
test.g(5).g(7)[5] = 1; 

不幸的是,你會在最後一個條目必須記住使用常規符號來設置值。

你會找回它像你期望:

test[5][7][5]; //1 

很顯然,我只是拉摹無中生有,你能拿出你自己的函數名。免責聲明:人們傾向於使用原型鏈來擴展內置類型,但據我所知,大多數主要框架不再這樣做,除非你或某些第三方JS使用相同的名稱來擴展數組,別的地方你應該沒問題。