как взять число и возвращает массив строк javascript

#javascript #arrays #string #numbers #push

#javascript #массивы #строка #числа #толкать

Вопрос:

упражнение: Создайте функцию, которая принимает число и возвращает массив строк, содержащих число, обрезанное на каждой цифре. примеры: 420 должен возвращать [«4», «42», «420»]; 2017 должен вернуться [«2», «20», «201», «2017»]

Это мой код, как я могу сделать его менее декларативным? не могу найти решение без push. и да, мне потребовалось много часов, чтобы попытаться разрешить его декларативным способом.Спасибо.

  function createArrayOfTiers(num) {
        arrT= num.toString().split("")
      let z= []
      const result = arrT.reduce((acc, curr)=>{
      acc= acc curr
      z.push(acc)
      return acc

      },"")
          return z;
      }
 

PS: Входные данные гарантированно будут целым числом в диапазоне [0, 1000000]

Комментарии:

1. Не могли бы вы объяснить, что вы подразумеваете под декларативным ?

2. если вы работаете с JavaScript, вы должны знать декларативное и императивное программирование. если нет, проверьте функциональное программирование для получения дополнительных знаний.

3. Я много работаю с Javascript. Однако я никогда не сталкивался с этими терминами. Я проведу некоторые исследования на эту тему, поскольку это кажется интересной темой. Спасибо за информацию.

Ответ №1:

Вы можете получить строку и вернуть из нее массив, используя замыкание, которое сохраняет предыдущие символы.

Array.from работает с итерируемыми, строка и массив имеют только один символ в качестве значения.

Следующее сопоставление принимает замыкание пустой строки. Это замыкание возвращает функцию для сопоставления. v является элементом массива, как и стандартный Array#map обратный вызов.

 Array.from(
    number.toString(),          // take iterables
    (s => v => s  = v)('')      // map value of array with the previous elements
)
 
 const getParts = number => Array.from(number.toString(), (s => v => s  = v)(''));

console.log(getParts(2017)); 

Комментарии:

1. не могли бы вы объяснить подробнее? используете ли вы каррирование? Я не могу понять, откуда берется v. большое вам спасибо @ninaScholz