@TomRiddle: Dziękuje, to co wysłałeś jest dla mnie bardzo pomocne. Mam jeszcze jedno pytanie, dlaczego w tym momencie konsola wypisuje wszystkie obiekty a nie tylko 6 wylosowanych?
No więc patrząc na Twój kod, widzę dwa problemy.
- Pierwszy, masz zupełny problem z debugowaniem swoich aplikacji. Jeśli chciałbyś spróbować naprawić swój kod, i dostrzec gdzie zrobiłeś błąd, powinienś dodać
console.log()
zaraz po wyjśćiu z funkcji randomItems()
:
const listContainer = randomList(items, amount);
console.log(listContainer);
Zobaczyłbyś wtedy, że ile razy uruchomisz swoją aplikację, to dostaniesz różną ilość elementów. Sugeruje to że Twój call do .splice()
zwraca randomową ilość elementów, zamiast jednego. Prawdopodobnie wołasz splice()
z początkowym indexem, i zwraca wartości do końca. Powinieneś dodać 1
jako drugi argument splice()
, żeby dostać tylko pierwszy element.
-
const randomList = elements.splice(Math.floor(Math.random() * elements.length), 1);
- Po drugie, skoro chcesz tylko jeden element, to nie ma powodu żeby zwracać
array
, zamiat pojedynczego elementu.
Tu jest poprawka
const list = [
{id: 1, name: 'A'},
{id: 2, name: 'B'},
{id: 3, name: 'C'},
{id: 4, name: 'D'},
{id: 5, name: 'E'},
{id: 6, name: 'F'},
{id: 7, name: 'G'},
{id: 8, name: 'H'},
{id: 9, name: 'I'},
{id: 10, name: 'J'},
{id: 11, name: 'K'},
{id: 12, name: 'L'},
];
function randomList(elements, amount) {
const result = [];
for (let i = 0; i < amount; i++) {
const [element] = elements.splice(Math.floor(Math.random() * elements.length), 1);
result.push(element)
}
return result;
}
randomList(list, 6).forEach((item, idx) => console.log(item.name, idx));