Javascript 当真实条件很少时,避免使用多个if语句

Javascript 当真实条件很少时,避免使用多个if语句,javascript,performance,if-statement,optimization,time-complexity,Javascript,Performance,If Statement,Optimization,Time Complexity,我想创建一个脚本来比较两个不同来源的变量。 我需要比较一些值a1,a2,…,an和一些其他值b1,b2,…,bn。我想知道a1=b1,a2=b2,…,an=bn。如果他们中的一些人不平等,我想知道他们中的哪些人不平等。这些变量是整数和字符串。所有对都有相同的可能性相等 我也知道,这些变量不相等的情况极为罕见。事实上,在1000对变量中,几乎有1对变量是不相等的。每次我将对几乎20个变量运行脚本数百次,因此大多数情况下所有变量对都是相等的。我想知道我是否能利用这个事实 作为第一种方法,我想到了类似

我想创建一个脚本来比较两个不同来源的变量。 我需要比较一些值a1,a2,…,an和一些其他值b1,b2,…,bn。我想知道a1=b1,a2=b2,…,an=bn。如果他们中的一些人不平等,我想知道他们中的哪些人不平等。这些变量是整数和字符串。所有对都有相同的可能性相等

我也知道,这些变量不相等的情况极为罕见。事实上,在1000对变量中,几乎有1对变量是不相等的。每次我将对几乎20个变量运行脚本数百次,因此大多数情况下所有变量对都是相等的。我想知道我是否能利用这个事实

作为第一种方法,我想到了类似于多个if语句的东西。例如:

let equal = true;
let issues = [];

if (a1 !== b1){
   equal = false;
   issues.push("a1!=b1");
}

...

if (a20 !== b20){
   equal = false;
   issues.push("a20!=b20");
}
只要大多数时候没有不相等的对,我就想把所有的a1,…,一个变量转换成一个变量
variableA
,把所有的b1,…,bn转换成一个变量
variableB
。比较这两个变量,只有当它们不相等时,才执行上述过程。如果清除了我的数据(没有null、未定义“”,等等),那么这样做有意义吗?我不确定这是否会缩短时间,我认为这可能是一种不好的做法

let variableA = a1 + a2 + ... + a20;
let variableB = b1 + b2 + ... + b20;
let equal = true;
let issues = [];

if (variableA !== variableB){
   equal = false;

   if (a1 !== b1){
      issues.push("a1!=b1");
   }

    ...

    if (a20 !== b20){
      issues.push("a20!=b20");
    }
}
或者:

if (!((a1===b1) && (a2===b2) && ... && (a20===b20))){ ...
我还考虑将变量存储在数组或对象中并进行比较。我认为将它们存储在对象中可能更好。我的脚本将用javascript编写,尽管我对这种方法而不是语言感兴趣

不管它们可以以何种方式进行比较,在知道几乎所有情况下我的条件都是假的情况下,有没有办法对其进行优化?

//将“a”组中的变量放入有序数组中
// place variables in 'a' group into ordered array
a_array = [a1, a2, a3, ..., an]

// place variables in 'b' group into ordered array
b_array = [b1, b2, b3, ..., bn]

// compare each item in array storing indexes of items which are not equal
not_equal_indexes = []
for (i = 0; i < a_array.length; i++) {
    not_equal_indexes.push(i) ? a_array[i] != b_array[i] : ""
}
print(not_equal_indexes)
a_数组=[a1,a2,a3,…,an] //将“b”组中的变量放入有序数组 b_数组=[b1,b2,b3,…,bn] //比较数组中存储不相等项索引的每个项 非相等索引=[] 对于(i=0;i
您必须使用一个运行时来接受数组中的多类型元素(即弱类型语言,如PHP、Python或Javascript),这样才能工作

否则,为每个组和每个组元素可用的每个数据类型创建一个数组。
循环配置的
看起来应该是相同的,只要记住元素的原始索引位置或其原始变量名,而不考虑它在强类型数组组中的位置,就可以稍加修改

知道我的条件几乎总是错误的,有没有办法优化它

// place variables in 'a' group into ordered array
a_array = [a1, a2, a3, ..., an]

// place variables in 'b' group into ordered array
b_array = [b1, b2, b3, ..., bn]

// compare each item in array storing indexes of items which are not equal
not_equal_indexes = []
for (i = 0; i < a_array.length; i++) {
    not_equal_indexes.push(i) ? a_array[i] != b_array[i] : ""
}
print(not_equal_indexes)
如果是这种情况,运行时将注意到并相应地进行优化。你没有理由这样做

此外,尝试通过连接字符串来优化比较是一个非常糟糕的主意,因为连接比您尝试优化的比较更昂贵。此外,比较字符串的成本大致与其长度成正比,因此比较一个长字符串并不比比较多个短字符串快。重复比较(首先比较凹面,然后比较单个字符串)当然比只看一次每个字符串要慢


尽管如此,除非该函数确实经常执行,否则这根本不重要:一个现代JavaScript运行时每秒可以比较10亿个字符。通常,您希望通过编写清晰易懂的代码来优化程序员时间,而不是运行时性能。

没有真正独立于语言的答案;不同的语言和不同的编译器/解释器处理相似代码的方式可能非常不同。