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

时间:2013-02-19 02:58:12

标签: javascript

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

部分,元素,项目,条目

在php中我会做类似

的事情
$arr[$section_id][$element_id][$item_id][$entry_id] = $entry;

在javascript中,这不起作用。我知道我可以在技术上将这些ID包装在引号中以强制它,但这似乎是一个坏主意。类似地,我可以创建一个对象并使用引用的整数方法,但这似乎是hacky。

现在我将数据存储在常规整数索引数组中,然后使用caolan的异步检测来按ID查找特定成员。这可行,但与PHP等效相比似乎非常混乱。我希望在JS中有一种更清洁的方法。

TIA!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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使用相同的名称在某处扩展Array否则你应该没事。