Реализуйте метод Split с помощью функции - PullRequest
0 голосов
/ 05 июня 2019

Я хочу реализовать метод split с помощью функции

Это то, чего я пытаюсь достичь

var string = 'aa,bb,c';

var separator = ',';

var stringList = string.split(separator);

function splitString() {
  console.log(stringList);
}

Это возвращает array

["aa", "bb", "c"]

Я пытаюсь реализовать то же самое с помощью функции, но она возвращает пустое array [] and not ["aa", "bb", "c"]

Я создал jsbin для тех, кто может помочь.

function split(string,separator) {
  var cache = [];
  var cachInt = 0;
  var lastWord = '';
  for (var i = 0; i < string.length; i++) {
    if(string[i] === separator) {
        cachInt++
        lastWord = ''
    }
    else {
      lastWord = lastWord + string[i];
      cache[cachInt] == lastWord;
    }
  }
  return cache;
}


function splitString() {
  console.log(split('string, separator',','));
}

1 Ответ

2 голосов
/ 05 июня 2019

Вы делаете это:

cache[cachInt] == lastWord;

Что должно быть, потому что вы не сравниваете, вы назначаете:

cache[cachInt] = lastWord;

Пока мы на этомЕсть место для улучшения.У вашей версии есть строка, упомянутая выше.Эта строка запускается каждая итерация i.Это на самом деле не нужно, так как вы хотите выполнить сохранение только при разбиении:

if(string[i] === separator) {
    cache[cachInt] = lastWord; // Only assign when we find a seperator
    cachInt++
    lastWord = ''
} else {
    lastWord = lastWord + string[i];
}

В этом есть небольшая проблема: последняя часть строки часто не имеет разделителя, это a,b,c ине a,b,c,.Мы можем легко это исправить с помощью проверки после for, чтобы увидеть, осталось ли у вас что-либо:

if( lastWord!=='' ){
     cache[cachInt] = lastWord;
}
return cache;

Это имеет дополнительную функцию, которая работает как rtrim() (независимо от того, хотите вы этого или нетрешать только вам).

Кроме того, если вам не нужно поддерживать более старые версии IE, не используйте var, используйте let.Если вы хотите знать, почему, этот вопрос хорошо объясняет .


Затем вы используете счетчик, чтобы запомнить, какой cachInt использовать.Поскольку теперь мы используем его только один раз для «cacheInt», например, один раз для каждого слова, мы знаем, что каждое добавление равно +1 и происходит только один раз для каждого слова.Мы также не заботимся об индексе, мы просто хотим, чтобы каждое слово было добавлено один раз.Таким образом, вы можете сделать cache[] = lastWord или использовать push, который немного аккуратнее: cache.push(lastWord).
Отменив использование этого счетчика, вы также можете удалить cachInt++ и let/var cachInt в началефункция, приводящая к меньшему коду.

Результат всего вышеперечисленного:

https://jsbin.com/mejayuv/1/edit?html,js,console,output

...