Вы делаете это:
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