Why i can't compare 3 arrays at the same time?

时间:2017-03-02 14:47:45

标签: javascript arrays

I have 3 arrays called a, b and c.

I compare them to check if their same indexes has same value.

If i compare like this it doesn't work.

 for (var i = 0; i < 3; i++) {
    if (a[i] === b[i] === c[i]) {
     console.log("Matched")
    }
 }

But if i do like this, it works.

for (var i = 0; i < 3; i++) {
   if (a[i] === b[i] && a[i] === c[i] && b[i] === c[i]) {
      console.log("Matched")
    }
 }

So, Why?

8 个答案:

答案 0 :(得分:4)

当您从=

中删除一个===时会发生一些有趣的事情

a=[1,2,3],b=[1,2,3],c=[1,2,3];

    for (var i = 0; i < 3; i++) {
        if (a[i] == b[i] == c[i]) {
         console.log("Matched")
        }
    }

    //Matched

有效!但为什么? 这是因为javascript中=====之间存在区别。

===必须准确无误。就像其他答案一样:a[i] === (b[i] === c[i]),然后转换为a[i] === truea[i] === false - 意味着它必须字面上是truefalse,而不仅仅是等同那个。

如果您使用==,那么它不一定非精确,只需等同于truefalse,或者我们通常会说truthy或{ {1}}。

注意:在这种情况下,我不建议将此方法与falsy一起使用,因为这只是为了说明问题。最好将它们分开并使用==。如果您尝试其他组合,您会注意到阵列上的匹配项不匹配。那是因为它们匹配===

请参阅此代码:

truthy

现在如果他们的所有内容都是字面a=[0,5,7],b=[1,3,8],c=[0,2,9]; for (var i = 0; i < 3; i++) { if (a[i] == b[i] == c[i]) { console.log("Matched") } }而您使用true怎么办?它也匹配。

===

答案 1 :(得分:3)

&#13;
&#13;
a=[1,2,3],b=[1,2,3],c=[1,2,3];
for (var i = 0; i < 3; i++) {
    if (a[i] === b[i] === c[i]) {
     console.log("Matched")
    }
    else{
      console.log("error");
    }
 }
&#13;
&#13;
&#13;

解释: a [i] === b [i] //返回布尔值truefalse

true | false === c [i]是false

检查代码。您可以看到其他部分正在运行。

同时检查以下代码

&#13;
&#13;
a=true,b=true,c=true;
if(a === b === c){
  console.log(a);
}
&#13;
&#13;
&#13;

答案 2 :(得分:2)

因为......这就是布尔逻辑的工作方式。

顺便说一句,您在if中有一项冗余检查。

如果a==bb==c则按照定义a==c

答案 3 :(得分:2)

因为a[i] === b[i] === c[i]不符合你的想法:它被解释为

<强> (a[i] === b[i]) === c[i]

然后根据第一个比较结果转换为true === c[i]false === c[i]

var a = [1, 2, 3];
var b = [1, 2, 3];
var c = [1, true, 3];

for (var i = 0; i < 2; ++i) {
  if (a[i] === b[i] === c[i]) {
    console.log('Match found at index: ' + i);
  }
}

答案 4 :(得分:2)

您正在解释的布尔逻辑不能像那样工作。您的第一个逻辑被解释为:(a[i] === b[i]) === c[i]。这就是为什么新的工作正常!

答案 5 :(得分:2)

你的代码中的

a [i] === b [i] 将首先执行

它返回一个布尔值。 然后将此布尔值与c进行比较,如

true === c

当然是假的

这样写你可以更好地理解它:

display: flex;

答案 6 :(得分:2)

因为它比较了第一部分,所以将值与下一部分进行比较。 您必须尝试使用​​内部支架作为第一部分。或者就像你在第二个例子中那样做。

答案 7 :(得分:1)

这样的事情:

    (a[i]===(b[i]===c[i]))
    ((a[i]===b[i])===c[i])