【发布时间】:2018-07-02 18:50:27
【问题描述】:
我有很多条件语句存储在一个表中,每个条件语句都有一些截然不同的格式(if x > Y、if Z = true、if Z <= 12 等)。我以这样一种方式存储它们,以便我可以轻松地循环遍历条件语句并执行一个函数来更新相关属性。
但是,正如我发现的那样,它不会让我将条件语句存储为变量。意思是,我必须显式声明每个条件语句,而不是声明一次并循环遍历所有可能的条件。
有没有办法做到这一点我错过了,或者根本不理解?
在下面的示例中,我想使用eTable[i].condition 循环遍历存储在该位置的所有条件。这有可能吗?
function checkEvents () {
eventConditionLength = Object.keys(eTable).length;
for (let i = 0; i < eventConditionLength; i++) {
if (eTable[i].condition) {
alert(i);
};
};
};
电子表格
var eTable = {
0: {
sceneTitle: '', //Descriptive/organizational only
sceneHeader: ['Event 1', 'Event 1', 'Event 1'],
sceneImage: ['/images/1.jpg', '/images/2.jpg', '/images/3.jpg'],
sceneText: ['Test Scene Text 1', 'Test Scene Text 1', 'Test Scene Text 1'],
sceneControls: ['myFunction1', 'myFunction2', 'myFunction3'],
visible: false,
completed: false,
condition: 'cEvent == "e0002"'
},
1: {
sceneTitle: '', //Descriptive/organizational only
sceneHeader: ['Event 1', 'Event 1', 'Event 1'],
sceneImage: ['/images/1.jpg', '/images/2.jpg', '/images/3.jpg'],
sceneText: ['Test Scene Text 1', 'Test Scene Text 1', 'Test Scene Text 1'],
sceneControls: ['myFunction1', 'myFunction2', 'myFunction3'],
visible: false,
completed: false,
condition: 'stat1 > 15 && completed == false'
}
};
【问题讨论】:
-
为什么不直接使用对象数组而不是对象对象?
-
cEvent、stat1、completed来自哪里? -
除了
completed,我看不出您的条件与每个对象有何关系。比较的变量在哪里?它们是否在每个对象的外部?如果是这样,您似乎可以存储调用Function构造函数所需的所有数据(参数名称和函数体),然后创建函数并传入数据。虽然没有更多信息,但很难说。 -
...如果这不是需要序列化的数据,那么您根本不需要字符串,只需创建函数即可。但同样,在提出合理的解决方案之前需要更多信息。如果不首先尽可能努力地消除为您所拥有的条件存储字符串,我不想继续。
-
我现在有十几个 JS 文件。仅包括与此处问题相关的位。也就是说,如果您好奇,它通常是一个简单的 RPG 制作工具,具有简化的 UI 布局。这意味着,我的大部分表格都包含 UI 信息。这个特定的表正在生成一个事件模式,它会随着您的决策而动态变化。我正在处理的触发器是触发模态显示的时间/位置,以及何时不显示。一般来说,这些表格尽可能地组织成字面阅读,以便知识有限的人能够阅读。
标签: javascript loops variables if-statement