2013-02-19 62 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使用相同的名称来扩展数组,别的地方你应该没问题。