Как из двух списков разной длины собрать словарь Javascript?

Есть два списка:

const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
const nums = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]

Как на выходе получить словарь типа:

{1:'Monday', 2:'Tuesday', ... , 16:'Tuesday'}

Спасибо


Ответы (3 шт):

Автор решения: Павел Ериков

Например вот так:

var dict = {};
const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
const nums = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
for(let i = 0; i < nums.length; i++)
    dict[nums[i]] = days[i % days.length];
  
console.log(dict);

→ Ссылка
Автор решения: OPTIMUS PRIME

Циклом бежать по большему массиву, а индекс для мелкого массива брать остатком от деления ( индекса_большого_массива % на_длину_мелкого )

const days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];

let dict = {};

nums.forEach((n, index) => dict[n] = days[index % days.length]);

console.log( dict );

→ Ссылка
Автор решения: Aziz Umarov

или так через reduce, воспользовался ответом от @OPTIMUS PRIME

const days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];

let dict = nums.reduce((acc, n, index) => { acc[n] = days[index % days.length]; return acc}, {});

console.log( dict );

→ Ссылка