JavaScript - дублирующий массив не работает - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь сделать массив с дубликатами элементов. Например:

var myArray = ["one", "two", "five"];

когда я перебираю цикл for:

for(var i = 0; i < myArray.length; i++){
  myArray.push(myArray[i]);
}

мой браузер зависает! Я не получаю значимой ошибки. Может кто-нибудь объяснить, почему это происходит?

Ответы [ 4 ]

0 голосов
/ 03 ноября 2018

Решением ES6 будет использование оператора распространения. Который ведет себя как конкат.

let myArray = ["one" ,"two","five"];
myArray = [ ...myArray, ...myArray];
0 голосов
/ 03 ноября 2018

Ваш цикл for никогда не заканчивается, потому что длина увеличивается для каждой итерации.

Для получения только одной копии вы можете заранее сохранить длину и зациклить только эту длину.

var myArray = ["one", "two", "five"];

for (var i = 0, l = myArray.length; i < l; i++){
    myArray.push(myArray[i]);
}

console.log(myArray);
0 голосов
/ 03 ноября 2018

Если вы измените myArray.length на постоянное число, эта проблема не возникает. Однако причина сбоя заключается в том, что каждый вызов .push () увеличивает длину вашего массива на 1. во всяком случае, я думаю, что этот сбой интересен и может быть необработанной ошибкой, может быть!

var myArray = ["one", "two", "five"];
var l=myArray.length;
for(var i = 0; i < l; i++){// for example l=3 here
  myArray.push(myArray[i]);

}
0 голосов
/ 03 ноября 2018

Когда вы используете добавление элементов в массив, длина увеличивается, что заставляет цикл for добавлять больше элементов, которые увеличивают длину и т. Д. ...

Простым решением является concat массив для себя:

var myArray = ["one", "two", "five"];

var result = myArray.concat(myArray);

console.log(result);

Или выдвиньте все элементы сразу, используя распространение, если вы хотите изменить массив:

var myArray = ["one", "two", "five"];

myArray.push(...myArray);

console.log(myArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...