Как работает этот фильтр для фильтрации пробелов? - PullRequest
0 голосов
/ 04 мая 2020
// The global variable
var globalTitle = "Winter    Is     Coming";

// Only change code below this line
function urlSlug(title) {
  return title
  .split(" ")
    .filter(x => x)
  .join("-")
  .toLowerCase();
}
// Only change code above this line

console.log(urlSlug(globalTitle))

// Result: winter-is-coming

Мои сомнения касаются этой строки: .filter (x => x) , как это работает для фильтрации пробелов в массиве?

Ответы [ 2 ]

1 голос
/ 04 мая 2020

@ Thefourthbird ответил на ваш вопрос относительно фильтра. Решение лучше разделить на один или несколько пробелов, хотя .split(/\s{1,}/g), тогда вам не нужен фильтр.

// The global variable
var globalTitle = "Winter    Is     Coming";

// Only change code below this line
function urlSlug(title) {
  return title
  .split(/\s{1,}/g)
  .join("-")
  .toLowerCase();
}
// Only change code above this line

console.log(urlSlug(globalTitle))

// Result: winter-is-coming

Или даже проще, используя замену .replace(/\s{1,}/g, '-'):

// The global variable
var globalTitle = "Winter    Is     Coming";

// Only change code below this line
function urlSlug(title) {
  return title
  .replace(/\s{1,}/g, '-')
  .toLowerCase();
}
// Only change code above this line

console.log(urlSlug(globalTitle))

// Result: winter-is-coming
1 голос
/ 04 мая 2020

Вы разделяетесь на пробел, в результате чего массив выглядит следующим образом:

[
    'Winter',
    '',
    '',
    '',
    'Is',
    '',
    '',
    '',
    '',
    'Coming'
]

Затем все элементы массива передаются в фильтр, который попытается преобразовать значения в логическое значение. Преобразование пустого пространства в логическое значение вернет false.

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

[
    'Winter',
    'Is',
    'Coming'
]

Еще один способ выполнить sh - использовать вместо него .filter(Boolean).

...