Могу ли я изменить содержимое строки в методе-прототипе? - PullRequest
0 голосов
/ 16 мая 2019

Perl имеет замечательный метод, называемый chomp ().Я могу сделать что-то вроде:

$string.chomp()

, и он удалит новую строку с конца.Я хочу реализовать ту же функциональность в Javascript, но не могу понять, как изменить объект в определении прототипа:

String.prototype.chomp = function() {
   this = this.replace(/\n$/, '')
}

Я не могу присвоить this.если я смотрю, я вижу, что this - это объект с ключом 0, поэтому я попытался this[0] = this[0].replace(/\n$/, ''), но это тоже не работает

Я могу сделать это с объектами:

Object.prototype.chomp = function() {
   Object.keys(this).forEach(k => this[k] = this[k].replace(/\n$/, ''))
}

но я не могу сделать это для одной строки.Есть ли какая-то магия, которую я могу сделать?

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Строки неизменны.Вам нужно будет переназначить результат chomp на новую строку:

String.prototype.chomp = function() {
  return this.replace(/\n$/, '')
};

const foo = `foo
`;
const fooChomped = foo.chomp();
console.log(fooChomped);
console.log(fooChomped.length);

Если вы хотите удалить все переводы строк с конца строки, повторите \n с + вместо:

String.prototype.chomp = function() {
  return this.replace(/\n+$/, '')
};

const foo = `foo



`;
const fooChomped = foo.chomp();
console.log(fooChomped);
console.log(fooChomped.length);
0 голосов
/ 16 мая 2019

JavaScript имеет trim , trimStart и trimEnd , которые должны делать то, что вы ищете

Метод trim () удаляет пробелы с обоих концов строки. Пробел в этом контексте - это все пробельные символы (пробел, табуляция, пробел и т. Д.) И все символы конца строки (LF, CR и т. Д.).

const str = `
foo
bar


`;


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