0

Hi guys so this function is part of a larger code I am writing but I isolated it to show my issue with it. So here is how it goes;

I declare an array called Movement as

var Movement =[
[1,8],[2,8],[3,8],[4,8],[5,8],[6,8],[7,8],[8,8],
[1,7],[2,7],[3,7],[4,7],[5,7],[6,7],[7,7],[8,7],
[1,6],[2,6],[3,6],[4,6],[5,6],[6,6],[7,6],[8,6],
[1,5],[2,5],[3,5],[4,5],[5,5],[6,5],[7,5],[8,5],
[1,4],[2,4],[3,4],[4,4],[5,4],[6,4],[7,4],[8,4],
[1,3],[2,3],[3,3],[4,3],[5,3],[6,3],[7,3],[8,3],
[1,2],[2,2],[3,2],[4,2],[5,2],[6,2],[7,2],[8,2],
[1,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1],[8,1]
]

but when I enter console.log

console.log(Movement)

I get this



Movement =[
[0,8],[0,8],[0,8],[true,8],[true,8],[true,8],true,8],[true,8],
[false,7],[false,7],[3,7],[4,7],[5,7],[6,7],[7,7],[8,7],
[1,6],[2,6],[3,6],[4,6],[5,6],[6,6],[7,6],[8,6],
[1,5],[2,5],[3,5],[4,5],[5,5],[6,5],[7,5],[8,5],
[1,4],[2,4],[3,4],[4,4],[5,4],[6,4],[7,4],[8,4],
[1,3],[2,3],[3,3],[4,3],[5,3],[6,3],[7,3],[8,3],
[1,2],[2,2],[3,2],[4,2],[5,2],[6,2],[7,2],[8,2],
[1,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1],[8,1]
]

Where is it getting all these true or false values? I don't deal with true or false at all in my code.

I run the array through a function that does not modify it NOR does the function return any true or false values so is there something I am missing?

JavaScript

let ChessMap = [
  8, 3, 4, 7, 5, 4, 3, 8,
  6, 6, 6, 6, 6, 6, 6, 6,
  0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 8, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0,
  60, 60, 60, 60, 60, 60, 60, 60,
  80, 30, 40, 70, 50, 40, 30, 80,
];
var Movement = [
  [1, 8],
  [2, 8],
  [3, 8],
  [4, 8],
  [5, 8],
  [6, 8],
  [7, 8],
  [8, 8],
  [1, 7],
  [2, 7],
  [3, 7],
  [4, 7],
  [5, 7],
  [6, 7],
  [7, 7],
  [8, 7],
  [1, 6],
  [2, 6],
  [3, 6],
  [4, 6],
  [5, 6],
  [6, 6],
  [7, 6],
  [8, 6],
  [1, 5],
  [2, 5],
  [3, 5],
  [4, 5],
  [5, 5],
  [6, 5],
  [7, 5],
  [8, 5],
  [1, 4],
  [2, 4],
  [3, 4],
  [4, 4],
  [5, 4],
  [6, 4],
  [7, 4],
  [8, 4],
  [1, 3],
  [2, 3],
  [3, 3],
  [4, 3],
  [5, 3],
  [6, 3],
  [7, 3],
  [8, 3],
  [1, 2],
  [2, 2],
  [3, 2],
  [4, 2],
  [5, 2],
  [6, 2],
  [7, 2],
  [8, 2],
  [1, 1],
  [2, 1],
  [3, 1],
  [4, 1],
  [5, 1],
  [6, 1],
  [7, 1],
  [8, 1]
]
const Game = {
  PlayerStatus: 1,
  Grabstate: 0,
  CheckU: 0,
  CheckL: 0
}

CheckUpdate();

console.log(Movement)

function CheckUpdate() {
  var uk = 3;
  var lk = 59
  for (var i = 0; i < 64; i++) {

    inc = 0
    if (ChessMap[i] === 70) {
      lk = i
      inc++;
    }
    if (ChessMap[i] === 7) {
      uk = i
      inc++
    }

    if (inc === 2) {
      break;
    }
  }

  var Matrix = []
  Matrix = Movement;


  var xu = Matrix[uk][0]
  var yu = Matrix[uk][1]
  var xl = Matrix[lk][0]
  var yl = Matrix[lk][1]

  //// upper king check list
  //hotizontal uk left check 

  for (var j = uk; j >= 0; j--) {
    var brker = 0;
    if (brker === 1) {
      break;
    }
    for (var n = xu; n >= 0; n--) {

      if (Matrix[j][0] = n && Matrix[j][1] === yu) {
        if (ChessMap[j] === 6 || ChessMap[j] === 8 || ChessMap[j] === 4 || ChessMap[j] === 3 || ChessMap[j] === 5) {
          brker = 1;
        }
        if (ChessMap[j] === 80 || ChessMap[j] === 70) {
          Game.CheckU = 1;
        }


      }
    }

  }
  /// horizontal uk right check

  for (var j = uk; j < uk + 7; j++) {
    var brker = 0;
    if (brker === 1) {
      break;
    }
    for (var n = xu; n < 8; n++) {

      if (Matrix[j][0] = n && Matrix[j][1] === yu) {
        if (ChessMap[j] === 6 || ChessMap[j] === 8 || ChessMap[j] === 4 || ChessMap[j] === 3 || ChessMap[j] === 5) {
          brker = 1;
        }
        if (ChessMap[j] === 80 || ChessMap[j] === 70) {
          Game.CheckU = 1;
        }
      }
    }
  }
  ////////////////////////////////    
  console.log(Game.CheckU)
}
Barmar
  • 741,623
  • 53
  • 500
  • 612
  • 2
    Typo: `if (Matrix[j][0] = n` should use `==` or `===`. – Barmar Jun 15 '21 at 02:44
  • 1
    What's the reason for `var Matrix = Movement`? Why not just use `Movement` in the following code? It doesn't make a copy, both variables refer to the same array. – Barmar Jun 15 '21 at 02:46
  • 1
    Mostly, this is just caused by the typo, but also [related](//google.com/search?q=site%3Astackoverflow.com+js+object+copy+property+changes) to [Modifying a copy of a JavaScript object is causing the original object to change](/q/29050004/4642212). – Sebastian Simon Jun 15 '21 at 02:52

1 Answers1

0

Your Movement array is being modified by this code:

if (Matrix[j][0]=n && Matrix[j][1]===yu)

You may have accidentally used an assignment operator (=) instead of an equality operator (===).

JosephDaSilva
  • 1,107
  • 4
  • 5