Задать вопрос
k12th
@k12th
console.log(`You're pulling my leg, right?`);

[].map и String.prototype.trim

Часто приходится делать что-нибудь такое:
function clearTags (rawTags) {
	return rawTags
		.split(',')
		.map(
			function (tag) {
				return tag.trim()
			}
		);
}


Смущает, что приходится каждый раз писать лямбду, и есть интуитивное ощущение, что можно обойтись чем-то вроде .map(String.prototype.trim.call) (не работает), но у меня не получилось. Поделитесь, если кто знает?

P.S. Решение вида:
function clearTags (rawTags) {
	var trim = function (arg) { return String.prototype.trim.call(arg); };
	return rawTags
		.split(',')
		.map(trim);
}
тривиально, не так красиво и не лишено недостатков.
  • Вопрос задан
  • 3582 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
@egorinsk
Можно проще.

var x = string.split(/\s*,\s*/g);
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Лучшим же решением, конечно же, является комбинация предложений от egorinsk и Aingis. Добавлю просто как выкрутится с прототипами:
function clearTags(str){
    var trim = String.prototype.trim.call.bind(String.prototype.trim);
    return str
        .split(',')
        .map(trim);
}

Но в данном случае лучше так не делать.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
function clearTags (rawTags) {
    var trim = function (arg) { return String.prototype.trim.call(arg); };
    return rawTags
        .split(',')
        .map(trim);
}

Эквивалентно
function clearTags (rawTags) {
    var trim = function (tag) { return tag.trim(); };
    return rawTags
        .split(',')
        .map(trim);
}


Тоесть вы просто замыкание присвоили переменной, на одну переменную больше. Никакого профита. Более того добавился вызов функции через прототип и через call (который сам по себе медленнее обычного вызова).
Ответ написан
В ECMAScript 6 писать ламбды гораздо проще:
str.split(",").map(function(str) str.trim());//Fx3+

или вообще так:
str.split(",").map(str=>str.trim());//Fx22+
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 11:03
5000 руб./за проект
18 дек. 2024, в 10:44
130000 руб./за проект
18 дек. 2024, в 10:02
7000 руб./за проект