#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