如何在Javascript中存储整数索引数据?

如何在Javascript中存储整数索引数据?,javascript,Javascript,我在PHP工作多年,在JS中为整数IDed对象创建一些更复杂的数据结构时遇到了困难。我需要构建一个对象,将这些更简单的对象存储在它们的整数ID上。因此,如果我有以下对象,每个对象都有一个唯一的整数id: 节、元素、项、条目 在php中,我会做如下操作 $arr[$section_id][$element_id][$item_id][$entry_id] = $entry; 在javascript中,这不起作用。我知道我可以在技术上用引号将这些ID括起来以强制使用,但这似乎是个坏主意。类似地,我

我在PHP工作多年,在JS中为整数IDed对象创建一些更复杂的数据结构时遇到了困难。我需要构建一个对象,将这些更简单的对象存储在它们的整数ID上。因此,如果我有以下对象,每个对象都有一个唯一的整数id:

节、元素、项、条目

在php中,我会做如下操作

$arr[$section_id][$element_id][$item_id][$entry_id] = $entry;
在javascript中,这不起作用。我知道我可以在技术上用引号将这些ID括起来以强制使用,但这似乎是个坏主意。类似地,我可以创建一个对象并使用带引号的整数方法,但这似乎有点老套

现在,我将数据存储在常规的整数索引数组中,然后使用caolan的async detect按ID查找特定的成员。这种方法可以工作,但与php等效方法相比似乎非常混乱。我希望在JS中有一种更干净的方法来实现这一点


蒂亚

由于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
var namespace=函数(名称、分隔符、容器){
var ns=name.split(分隔符| |'。)
,o=容器| |窗口
,i=0;
而(i++
这有点难看,但它会让你非常接近你想要的

您可以向JavaScript数组类添加一个方法,如下所示:

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
很明显,我只是凭空抽出了g,你可以想出你自己的函数名


免责声明:人们往往不赞成使用原型链扩展内置类型,但据我所知,大多数主要框架不再这样做,除非您或某些第三方JS使用相同的名称在其他地方扩展阵列,否则您应该很好。

在每个嵌套级别检查下一个属性是否存在并根据需要创建它并不是很困难……如果不了解用例bettera,很难回答这个问题json对象{}可以充当关联键/对关联。您至少可以提供一个json数据示例吗?@YounElan没有
json对象这样的东西。json是一个字符串,但不完全正确。对象只是关联数组。事实上,这将运行得很好。