Jak masz jakieś losowe dane, to lepiej je losować poza obiektem. Jeśli obiekt potrzebuje do czegoś losowe dane, to lepiej je podawać do obiektu np. w konstruktorze. Zakładając, że to są jednorazowe dane. Co innego, jeśli obiekt ma się zachowywać losowo. Wtedy faktycznie mógłby sobie coś losować. Ale jeśli nie, to po co komplikować sytuację? Losowe dane są tricky (np. gorzej się testuje, są nieprzewidywalne itp.). Więc lepiej nie wrzucać tego bez potrzeby do obiektów.
Więc mógłbyś zrobić tak
function person(nLos) {
..... // konstruktor
}
for(let i=0;i<15;i++) {
const nLos = Math.floor(Math.random()*21);
if(!aTab.find(o => o.nLos == nLos)) { // uwaga, zmieniłem tablicę na aTab. Nie wiem, czy o to chodziło
aTab.push(oNew(nLos)};
}
}
co do if(!oNew.aVal.includes(oNew.nLos))
, to nie wiem, co chcesz osiągnąć. Czemu ta tablica jest w obiekcie? Czy tam mają być tylko liczby [7,13]
czy coś więcej? Ja założyłem, że chodziło ci o to, żeby obiekty się nie powtarzały względem nLos (więc dlatego w kodzie wyżej dałem aTab.find
, ale nie wiem, czy o to ci chodziło). Aha zmieniłem includes na find, żeby przelecieć przez obiekty i sprawdzić czy jakiś nie zawiera właściwości nLos. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
Aha, przejrzyj odpowiedzi w tym wątku, bo może twój problem jest podobny:
Przypsianie kilku zmiennym wartości z tablicy
Poza tym uwagi co do stylu:
- formatowanie ci się rozwaliło (przynajmniej tutaj na forum)
- konstruktory w JS (oraz klasy w ES6) zwyczajowo się pisze wielką literą czyli
Person
a nie person
.
- zmienne profesjonalnie się pisze po angielsku wszystkie
- notacja węgierska w JS to raczej coś bardzo niespotykanego, więc lepiej tego nie stosować, jeśli chcesz, żeby jakikolwiek inny programista JS rozumiał twój kod ;) pewnie nawet nie zakuma, że to jakaś notacja węgierska (chyba, że to programista WebGL, który takiej używa w shaderach).