如何在Javascript中存储整数索引数据
How to store integer indexed data in Javascript?
我在PHP工作多年,在JS中为整数ID的对象创建一些更复杂的数据结构时遇到了困难。我需要构建一个对象来存储这些更简单的对象,这些对象以其整数id分层键控。因此,如果我有以下对象,每个对象都有一个唯一的整数id:
区段、要素、项目、条目
在php中,我会做一些类似的事情
$arr[$section_id][$element_id][$item_id][$entry_id] = $entry;
在javascript中,这是不起作用的。我知道,从技术上讲,我可以用引号把这些ID括起来以强制使用,但这似乎是个坏主意。类似地,我可以创建一个对象并使用带引号的整数方法,但这似乎很难。
现在,我将数据存储在常规整数索引数组中,然后使用caolan的异步检测来按ID查找特定成员。这很有效,但与php等价物相比似乎非常混乱。我希望在JS中有一个更干净的方法。
TIA!
由于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
这有点难看,但它会让你非常接近你想要的。
您可以向JavaScriptArray类添加一个方法,如下所示:
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在其他地方使用相同的名称来扩展Array,否则你应该没事。
相关文章:
- 名称输入的索引
- 在jQuery中获取表的行索引
- 测试索引值是否等于某个数字的倍数
- 循环遍历数组中的特定索引
- 按照选项卡索引的顺序循环一个jQuery选择
- 在JavaScript中通过索引从对象数组中获取值
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 检测个位数整数时正在转换毫秒
- 限制javascript变量的最小/最大整数
- 如何在 Javascript 中将变量的值从字符串转换为整数
- 正则表达式只允许 x 个整数
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- 减去两个索引不同但值相同的整数
- 阻止 Internet Explorer 将我的索引转换为整数
- 根据值(整数,字符串)或(整数,浮点数)的混合返回数组的索引
- 无效的列索引未定义.取值范围为[0-8]之间的整数
- 如何在Javascript中存储整数索引数据
- 如何在关联数组上使用整数索引进行迭代
- 访问不完整数组的随机索引
- 索引不是连续整数的数组长度