簡體   English   中英

比較Object.values數組不起作用

[英]Comparing Object.values array not working

所以我正在打井字游戲。 這個數組是所有可能的獲勝條件。

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');
    }
}

運行此命令時,您會發現記錄了“ o won”。 我對為什么這樣做感到困惑。 Object.values返回一個數組。 當我使用嚴格等於比較這些值時,它似乎仍在檢查每個值是否為字符串,而不是比較實際的字符串。

您的代碼使用逗號運算符,該運算符從左到右評估每個操作數並返回最后一個操作數。 在下面的行中,最后一個操作數為“ o”,這是一個非空字符串,在隱式轉換為布爾值時為true。 因此,該表達式將始終為真:

if(Object.values(array[i]) === "o","o","o"){

逗號運算符: https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comma_Operator

要確定兩個數組是否相等,可以使用如下函數:

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
}

您不能像這樣鏈接相等性比較-您應該顯式測試每個值,如下所示:

 const arrayItem = {box1: "o", box2: "o", box3: "o"} if(Object.values(arrayItem).every(item => item === "o")) console.log('o wins'); 

數組(對象)引用內存位置,並且僅當對象引用內存中的相同位置時,對象才被認為是相等的,因此,即使語法正確,您也無法做您似乎試圖做的事情:

if(Object.values(array[i]) === ["o","o","o"])

因為新創建的["o","o","o"]沒有引用與array變量中的對象相同的對象。

在行中使用方括號。

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');
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM