Я хочу заполнить объект разными комбинациями. Как это сделать?

Привет смотрящим данный вопрос. Поставил себе задачу заполнить свойство объекта разными комбинациями.
let ball = {
  name: "ball",
  chance: 100
};
let pen = {
  name: "pen",
  chance: 100
};
let pencil = {
  name: "pencil",
  chance: 100
};

let things = [ball, pen, pencil];

let table = {
  color: "black",
  content: {
    bigCrate: {
      isLocked: false,
      loot: []
    },
    mediumCrate: {
      isLocked: false,
      loot: []
    },
    smallCrate: {
      isLocked: false,
      loot: []
    },
  }
};

function randomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

function rnd() {
  for(let key in table.content) {
    things.forEach(function(item, i, arr) {
      let combination = [];
    
      let chance = randomInt(0, 100);
      if(chance <= item.chance) {
        combination.push(item);
      }
      if(i == arr.length - 1) {
        table.content[key].loot = combination;
        console.log(table.content[key].loot);
      }
    });
  }
}

Что я хотел сделать?
Есть 3 объекта(шарик, ручка и карандаш) и 3 ящика в шкафчике. С ними и надо создать комбинацию, которую и поместим в объект. Также ещё существует вероятность того, что предмет может и не попасть в ящик, эта вероятность есть в объекте, который попадает в комбинацию.

Дело в том, что после выполнении функции в ящике остаётся только последний элемент массива с элементами, а именно карандаш. Даже если поставить шанс на 100%, то шарика и карандаша в ящичке не появится. В чем ошибка?

Последовательность вовсе необязательна, главное, чтобы содержимое ящичков было разным.
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
@BillyHerington Автор вопроса
Нашёл решение:
function rnd() {
  for(let key in table.content) {
    table.content[key].loot = [];
    
    things.forEach(function(item, i, arr) {
      let chance = randomInt(0, 100);
      
      if(chance <= item.chance) {
        table.content[key].loot.push(item);
      }
    });
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы