Guest User

Untitled

a guest
Apr 19th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.05 KB | None | 0 0
  1. import { getLength } from './strings'; // eslint-disable-line
  2.  
  3. // BEGIN (write your solution here)
  4. const substr = (str, start = 0, size = getLength(str)) => {
  5. const length = getLength(str);
  6.  
  7. if(start >= length) {
  8. return '';
  9. }
  10.  
  11. const currentIndex = start < 0 ? 0 : start;
  12. let lastIndex = currentIndex + (size - 1);
  13. if(lastIndex + 1 < currentIndex) {
  14. lastIndex = currentIndex;
  15. }
  16. else if(lastIndex > length - 1) {
  17. lastIndex = length - currentIndex - 1;
  18. }
  19.  
  20. let result = '';
  21. for(let i = currentIndex; i <= lastIndex; i++) {
  22. result = `${result}${str[i]}`;
  23. }
  24. return result;
  25. }
  26. // END
  27.  
  28. export default substr;
  29.  
  30. substr.js
  31. Реализуйте и экспортируйте по умолчанию функцию substr, которая возвращает подстроку из переданной строки. Подстрокой называется любая выбранная часть строки. Функция принимает на вход три параметра:
  32.  
  33. Строка.
  34. Начальный индекс. Значение по умолчанию: 0.
  35. Длина подстроки. Значение по умолчанию: длина всей строки.
  36. У этой функции множество вариантов поведения:
  37.  
  38. Если переданная длина отрицательная, то внутри она становится единицей
  39. Если переданная длина равна нулю, то возвращается пустая строка
  40. Если конечный индекс (переданная длина + начальный индекс) выходит за границу строки, то берется подстрока от начального индекса до конца строки
  41. Если начальный индекс отрицательный, то внутри он становится нулем
  42. Если начальный индекс выходит за границу слова справа, то всегда возвращается пустая строка
  43. По умолчанию возвращается сама строка:
  44.  
  45. substr(''); // => ''
  46. substr('abba'); // => abba
  47. substr('abba', 0, 1); // => a
  48. substr('abba', 1, 2); // => bb
  49. substr('abba', -10, 2); // => ab
  50. substr('abba', -1, 100); // => abba
  51. substr('abba', -1, -1); // => a
  52. substr('abba', 1, -10); // => b
  53. substr('abba', 1, 0); // => ''
  54. substr('abba', 100, 3); // => ''
  55. Для реализации этой функции, используйте подход, который называется "нормализация". Он заключается в том, что перед тем как делать вычисления, данные приводятся к виду, с которым удобно работать. Например длина строки для substr может иметь следующие неудобные значения:
  56.  
  57. Отрицательное число
  58. Число выходящее за границу строки
  59. Индекс + Длина выходят за границу строки
  60. В каждой из этих ситуаций длину строки можно изменить на такое значение, которое будет удобно для обработки сразу всех возможных случаев. Если число отрицательное, то длина становится равной единице (из условия), если оно выходит за границу строки, то его нужно сделать равным длине строки. В последнем случае длина должна стать числом Длина Строки - Индекс. После этих манипуляций, процесс взятия подстроки становится универсальным и не содержащим условия.
  61.  
  62. Подсказки
  63. Функция getLength возвращает длину переданной ей строки: getLength('cat'); // => 3
Add Comment
Please, Sign In to add comment