1

So since JavaScript doesn't let you copy array using "=" I have to write this code. But it doesn't work

let arr = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];
var arrclone = [];

for (let x = 0; x < arr.length; x++) {
  for (let y = 0; y < arr[x].length; y++) {
    arrclone[x][y] = arr[x][y];
  }
}
console.log(arrclone);

It said

arrclone[x][y] = arr[x][y];
                    ^
TypeError: Cannot set property '0' of undefined. 

How is it undefined both of them are already been declared. Sorry, I am a beginner sorry if my question seems stupid.

0

3 Answers 3

2

When you start, each row of the array is empty. So initialise it to an empty row of array:

for (let x = 0; x < arr.length; x++) {
  // Use this...
  arrclone[x] = [];     // ========================> You missed this line.
  for (let y = 0; y < arr[x].length; y++) {
    arrclone[x][y] = arr[x][y];
  }
}

FYI, for the right approach, please use Array.slice() (but only for primitive values, see the problem here).

Sign up to request clarification or add additional context in comments.

1 Comment

So small elements in a mother array have to be declared as array type too before you can add stuff into them ? I didnt know that, I thought when I use arrclone[x][y] = ... then JavaScript would automatic understand arrclone[x] is also an array too. Thanks sir
2

You should ideally be using Array.slice() for copying arrays:

let arr = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];
var arrclone = arr.map(e => e.slice());
console.log(arrclone);

Comments

1

Javascript is not a language that makes copies on assignment. It uses references and stores them instead. Here you are literally just copying reference to the data instead of actual data. There are multiple ways to help you with this.

  1. The most simple way is to use var arrclone = JSON.parse(JSON.stringify(arr))

  2. We can also use array destructuring and it will look something like this: var arrclone = [...arr]

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.