Javascript Новая функциональность массива - PullRequest
3 голосов
/ 20 апреля 2020

Я наткнулся на приведенный ниже код на одном веб-сайте, и я не могу понять строку, отмеченную как «СОМНЕНИЕ». Как функция возвращает повторяющийся текст с помощью «new Array (n + 1) .join (this)»?

if (!String.prototype.repeat) { 
  String.prototype.repeat = function(n) {
    return new Array(n + 1).join(this);    /* DOUBT */
  };
}
alert( "La".repeat(3) );

Output: LaLaLa

Ответы [ 2 ]

4 голосов
/ 20 апреля 2020

Когда вы join массиве длины n по аргументу str, вы создадите новую строку, вставив n - 1 элементов str, так что один будет между каждым элементом массива. Например:

const arr = ['foo', 'bar', 'baz'];
arr.join(' ')
// results in
// foo bar baz

new Array(n + 1) создает массив длиной n + 1, но без элементов. Эти несуществующие элементы при преобразовании в строку с помощью .join приводят к пустой строке.

this внутри String.prototype.repeat - это строка, для которой вызывается функция. Например:

'foo'.repeat(

приводит к вызову String.prototype.repeat с this из 'foo'.

Итак:

new Array(n + 1).join(this)

приводит к новому строка, содержащая n повторений this.

Другой способ просмотра, если вызывается 'x'.repeat(2), создается следующий массив:

// [<empty>, <empty>, <empty>]
// insert 'x' between each element of the array:
// '' + 'x' + '' + 'x' + ''
// result: 'xx'
0 голосов
/ 20 апреля 2020

Я Тигран, и я могу ответить на ваш вопрос.

В классе String мы применяем метод повторения:

 if (!String.prototype.repeat) { 
  String.prototype.repeat = function(n) {
     //some code
  }
}

Это - заданная строка (в этом примере "La"):

return new Array(n + 1).join(this);

Давайте обсудим по строке "La", "La".repeat(3) есть this это "La" и n равно 3. new Array(3 + 1) -> [empty × 4] [,,,,].join('La') -> "LaLaLa" (, -> empty) join - метод преобразования массива в строку по заданной строке. Если есть какие-либо вопросы, не стесняйтесь спрашивать.

...