多维对象
Javascript: multi-dimensional object
本文关键字:对象 更新时间:2023-09-26
我想创建一个对象,从以下内容开始:
var map = {};
然后,我想用这个函数添加项目:
add = function(integerA, objectB) {
map[objectB.type][integerA] = objectB;
}
那么,这是我想要实现的对象结构的一个随机示例:
map = {
'SomeType' : { 0 : 'obj', 2 : 'obj', 3 : 'obj' },
'OtherType' : { 0 : 'obj', 5 : 'obj' },
};
现在,我的问题。我不能算map[objectB.type][integerA] = objectB;
,因为map[objectB.type]
没有定义。我可以通过if语句检查map[objectB.type]
是否存在,并在必要时创建map[objectB.type] = {};
来解决这个问题。
否则我可以预加载所有对象类型。然而,我宁愿不这样做。
我的问题:有没有一种方法,我可以创建对象"在飞行中",而不必检查类型是否已经存在,每次我想调用add
函数或预加载所有类型?
重要的是,我的添加功能是尽可能快,地图对象是正确的,因为我需要在很短的时间内读取和写入很多内容(这是一个动画/游戏应用程序)。
不,没有任何其他方法可以动态创建对象。每次只检查是否存在:
add = function(integerA, objectB) {
if (!map[objectB.type]) {
map[objectB.type] = {};
}
map[objectB.type][integerA] = objectB;
}
如果你想提高性能,你可以考虑一些缓存技术
您可以使用布尔或快捷方式(至少避免显式的if
)。它可能不是那么可读:
var data = map[objectB.type] || (map[objectB.type] = {});
data[integerA] = objectB;
这是有效的,因为赋值实际上返回被赋值的值,而OR表达式返回计算结果为true
的第一个值。
我不认为使用if
对性能有任何影响(实际上,我的回答可能是"更慢")。
如果您仅将映射用于查找,并且不需要遍历维度,则可以将维度合并为单个键。例如:
add = function(integerA, objectB) {
var key = objectB.type + '-' + integerA;
map[key] = objectB;
}
相关文章:
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何使用json将对象列表从java转换为javascript
- 序列化数据属性中对象的最可靠方法
- 如何访问声音管理器2创建的声音对象
- FabricJs-限制主对象内添加对象的移动区域
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 值对象在某个变量发生更改后发生更改
- 如何为json对象中的段发送array[]
- Chrome开发工具(如何知道我在调用哪个javascript对象)