Алгоритм динамического заполнения массива Javascript нулями до и после значений - PullRequest
0 голосов
/ 04 июня 2019

Я получаю данные месяцев динамически с помощью python / django и передаю их моему шаблону. Там я использую Javascript для манипулирования данными

Это означает, что в моем шаблоне у меня есть массив javascript, каждое число которого представляет месяц примерно так:

months = [1,2,3,4]

или около того:

months = [4,5,6]

или около того:

months = [6,7,8]

В зависимости от массива выше, я хотел бы заполнить недостающие позиции нулями. Отсутствующие позиции означают, что массив должен иметь длину 12 в конце. Каждый месяц должен быть в точном положении. Например:

months = [1,2,3,4,0,0,0,0,0,0,0,0]

или около того

months = [0,0,0,4,5,6,0,0,0,0,0,0]

или около того

months = [0,0,0,0,0,6,7,8,0,0,0,0]

Я пробовал много вещей. Splicing показался хорошим методом, но не сработал, как ожидалось. Я не мог решить это, используя Array.fill. Я также попытался создать новый массив с 12 нулями, а затем вставить значения другого массива в него, но это не сработало.

Может кто-нибудь указать мне правильное направление или есть идея? Очень ценится.

Ответы [ 3 ]

5 голосов
/ 04 июня 2019

Вы можете взять новый массив и заполнить его элементами индекса, если они найдены, или нулем.

const fill = m => Array.from({ length: 12 }, (_, i) => +m.includes(i + 1) && i + 1);

console.log(...fill([1, 2, 3, 4]));
console.log(...fill([4, 5, 6]));
console.log(...fill([6, 7, 8]));
3 голосов
/ 04 июня 2019

Вы можете отобразить пустой массив из 12 элементов, проверяя, присутствует ли номер месяца в исходном массиве:

const padZeroes =  arr => [...Array(12)].map((item,index) => arr.includes(index+1) ? index+1 : 0);

console.log(padZeroes([5,6,7,8]));
3 голосов
/ 04 июня 2019

Составьте список из 12 месяцев

true_months = [1,2,3,4,5,6,7,8,9,10,11,12] (или true_months = list(range(1,13)))

затем ваша переменная

months = [4,5,6]

ипростым if / else в for для

[x if x in months else 0 for x in true_months]

вернется

[0, 0, 0, 4, 5, 6, 0, 0, 0, 0, 0, 0]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...