我有一个用例,我想查看一组数据是否与一个非常小的条件列表匹配(为了便于论证,假设它少于 20 个)。
我在客户端和服务器端 (NodeJS) 上执行 JavaScript。我试图在两个选项(或您可能拥有的任何其他选项)之间进行选择,并且不确定复杂性和计算时间会有多大不同。我有一种感觉,他们可以忽略不计。
选项 1:迭代条件列表
var conditions = [{
prop: 'a', check: '===', val: 'foo'
}, {
prop: 'b', check: '!==', val: 'bar'
}];
for (var i=0;i<conditions.length;i++) {
// Check conditions[i]
if (conditions[i].check === '===') {
if (data[conditions[i].prop] === conditions[i].val) {
// Keep checking
} else {
// Fail
}
} else if (conditions[i].check === '!==') {
...
}
}
选项 2:将条件转换为 JavaScript
if (data.a === 'foo' && data.b !== 'bar' && ... ) {
// Passes
}
从技术上讲,选项 1 的执行时间为 O(n),而选项 2 的执行时间为 O(1),但是对于这么小的列表来说,这真的很重要吗,特别是当您考虑执行 JSON.eval()
所需的时间时。和/或为该帐户提供唯一的代码?
最佳答案
首先,eval
是不好(大多数时候)。
对于所有这些 if 条件,代码看起来很难看,但从性能 Angular 来看,如果不满足条件,其中的代码将不会运行。因此最终需要更长的时间来解析但不运行它。
如果您的迭代计数那么低,那么使用第一个示例时的性能应该不成问题。
当您想要精确测量时间使用情况时,您可以编写一个测试。
关于javascript - 循环与 if 语句的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39671369/