Метод split не находит пробел в списке

331
27 ноября 2017, 20:34

В объекте есть свойство className, которое содержит список «классов» – слов, разделенных пробелом.Создайте функцию addClass(obj, cls), которая добавляет в список класс cls, но только если его там еще нет.

  1. Разбиваю список в объекте методом split по (' '),а он отказывается этот пробел находить..

  2. Актуальна ли проверка на наличие класса в списке через метод indexOf?Или надо проводить сравнение arr[i]==cls ?

function addClass(obj, cls) { 
  var arr = obj.className.split(' '); 
  for (var i = 0; i < arr.length; i++) { 
    if (!!(~arr.indexOf(cls))) { 
      return; 
    } 
  } 
  arr.push(cls); 
 
  obj.className = arr.join(' '); 
} 
 
var obj = { 
  className: 'open menu' 
} 
 
addClass(obj, 'new'); 
addClass(obj, 'open'); 
addClass(obj, 'me'); 
 
console.log(obj.className);

Answer 1

Ошибка в использовании метода indexOf

  1. этот метод возвращает индекс найденного элемента, либо -1, если элемент не найден. Поэтому проверка !!(arr.indexOf(cls)) работает не так как ты ожидаешь.

  2. этот метод уже проходит по массиву - нет нужды делать отдельный цикл.

Исходя из этого код можно исправить так:

function addClass(obj, cls) { 
  var arr = obj.className.split(' '); 
  if (arr.indexOf(cls) == -1) { 
    arr.push(cls); 
 
    obj.className = arr.join(' '); 
  } 
} 
 
var obj = { 
  className: 'open menu' 
} 
 
addClass(obj, 'new'); 
addClass(obj, 'open'); 
addClass(obj, 'me'); 
 
console.log(obj.className);

READ ALSO
Регулярное выражение, убрать пробелы

Регулярное выражение, убрать пробелы

Вот таким регулярным выражением удаляю все символы кроме цифр в строке

286
Как пронормировать квадратную матрицу A [5] [5]?

Как пронормировать квадратную матрицу A [5] [5]?

Пронормировать квадратную матрицу A [5] [5], разделив все элементы каждой строки на максимальный по модулю элемент матрицы

213
Массив из значений input

Массив из значений input

Есть функция-сборщик значений

306
TypeError: squareGen is not a function

TypeError: squareGen is not a function

Выполняю простое решение задач, но попался на распространненую ошибку и не могу понять почему такПрошу объяснить

240