Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在比较Object.values数组不工作_Javascript - Fatal编程技术网

Javascript 正在比较Object.values数组不工作

Javascript 正在比较Object.values数组不工作,javascript,Javascript,所以我在做一个井字游戏。此阵列是所有可能的获胜条件 let array = [ {box1: "empty", box2: "empty", box3: "empty"}, {box1: "empty", box4: "empty", box7: "empty"}, {box1: "empty", box5: "empty", box9: "empty"}, {box2: "empty", box5: "empty", box8: "emtpy"}, {box3: "emtp

所以我在做一个井字游戏。此阵列是所有可能的获胜条件

let array = [
  {box1: "empty", box2: "empty", box3: "empty"},
  {box1: "empty", box4: "empty", box7: "empty"},
  {box1: "empty", box5: "empty", box9: "empty"},
  {box2: "empty", box5: "empty", box8: "emtpy"},
  {box3: "emtpy", box6: "emtpy", box9: "empty"},
  {box3: "empty", box5: "empty", box7: "empty"},
  {box4: "empty", box5: "empty", box6: "emtpy"},
  {box7: "emtpy", box8: "empty", box9: "emtpy"}
];
下一位代码用于检查是否满足赢的条件

for(let i = 0; i < array.length; i++){
    if(Object.values(array[i]) === "o","o","o"){
      console.log('o won');
    } else if (Object.values(array[i]) === "x","x","x"){
      console.log('x won');
    } else if (Object.values(array[i]) === "empty","empty","empty"){
      console.log('works as expected');
    } else {
      console.log('total fail');
    }
}
for(设i=0;i

当您运行此命令时,您会发现“o won”已被记录。我对它为什么会这样感到困惑。Object.values返回一个数组。当我使用“严格等于”比较这些值时,它似乎仍然在检查每个值是否为字符串,而不是比较实际字符串。

你不能像那样进行相等比较-你应该明确地测试每个值,就像这样:

const arrayItem={box1:“o”,box2:“o”,box3:“o”}

if(Object.values(arrayItem).every(item=>item==“o”))console.log('o wins')您的代码使用的是逗号运算符,它从左到右计算每个操作数并返回最后一个操作数。在下一行中,最后一个操作数是“o”,一个非空字符串,隐式转换为布尔值时为真。因此,这句话永远是正确的:

if(Object.values(array[i]) === "o","o","o"){
逗号运算符:

要确定两个数组是否相等,可以使用以下函数:

function arraysEqual(a, b) {
    return a.length == b.length && a.every(function(element, index) {
        return element === b[index];
    });
}

if (arraysEqual(myArray, ['x', 'x', 'x'])) {
    // they're equal
}

为行使用括号

for(let i = 0; i < array.length; i++){
    if(Object.values(array[i]) === ["o","o","o"]){
      console.log('o won');
    } else if (Object.values(array[i]) === ["x","x","x"]){
      console.log('x won');
    } else if (Object.values(array[i]) === ["empty","empty","empty"]){
      console.log('works as expected');
    } else {
      console.log('total fail');
    }
}
for(设i=0;i
(false,“o”)==“o”
,因为
几乎是
,但最后一个表达式的值是值。