Podział tablicy obiektów

0

Cześć, mam pewien problem, mianowicie posiadam tablicę obiektów ok. 500 obiektów. Chcę ją podzielić na regiony tak aby w jednym regionie było 10 obiektów, które będą wyświetlane. Próbowałem to rozwiązać dwuwymiarową tablicą ale nie wyszło.

var region = [];

for (var i = 0; i < iloscRegionow; i++) {
    region[i] = [];
    for (var j = 0; j < tablicaObiektow.length; j++) {
        region[i][j] = tablicaObiektow[j];
        if(j%10==0){
            i++;
        }
    }
}
1

co konkretnie chcesz zrobić? opisz to inaczej... co nie działa Ci w rozw. powyżej.

0

Mam 500 obiektów w tablicy, każdy obiekt ma swoje określone wartości. Chcę te 500 obiektów podzielić automatycznie na mniejsze tablice po np. 10 obiektów. Tak żebym mógł się do nich odwołać np. region[0].element[0].nazwaElementu lub region[0][0].nazwaElementu.

Tak aby przypisało mi w taki sposób:

let region = [];
   region[0] = [obiekt[0], obiekt[1]];
   region[1] = [obiekt[2], obiekt[3]];

Aktualny kod (poniżej) dzieli mi po x obiektów ale każdy region jest taki sam czyli pierwsze 15 obiektów:

for (let i = 0; i < iloscRegionow; i++) {
    region[i] = [];
    for (let j = 0; j < 15; j++) {
        region[i][j] = obiekt[j];
        }
}
0

Bo pobierasz w kółko pierwszych piętnaście obiektów

= obiekt[j];

Spróbuj tak:

var rozmiarRegionu = 15;

for (let obiektNr = 0; obiektNr < iloscObiektow; obiektNr++) {
  regionNr        = Math.floor(obiektNr / rozmiarRegionu);
  obiektRegionuNr = obiektNr - (regionNr * rozmiarRegionu);
  console.log(regionNr, obiektRegionuNr, "=", obiektNr);
  region[regionNr][obiektRegionuNr] = obiekt[obiektNr];
}
0

Bo to było pisane z palca bez testowania i w ogóle nie działało :p

var obiekt = [101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147];
var region = new Array();
var iloscObiektow = obiekt.length;
var rozmiarRegionu = 15;

for (let obiektNr = 0; obiektNr < iloscObiektow; obiektNr++) {
  let regionNr        = Math.floor(obiektNr / rozmiarRegionu);
  let obiektRegionuNr = obiektNr - (regionNr * rozmiarRegionu);
  if (obiektRegionuNr==0) region[regionNr] = new Array();
  region[regionNr][obiektRegionuNr] = obiekt[obiektNr];
  console.log(regionNr, obiektRegionuNr, "-", obiektNr, "=", obiekt[obiektNr]);
}```
0

Wszystko fajnie teraz w pętli mi przypisuje ale poza pętlą jak wywołuje: console.log(region[0]); Wyświetla mi, że mam tablicę 15 elementów ale 14 pierwszych jest pustych.

0

Mój bład, wszystko jest git. Miałem błąd w pętli..

0
wechuge napisał(a):

Wszystko fajnie teraz w pętli mi przypisuje ale poza pętlą jak wywołuje: console.log(region[0]); Wyświetla mi, że mam tablicę 15 elementów ale 14 pierwszych jest pustych.

Niemożliwe.

Po dopisaniu na końcu:


console.log(region[0]);
console.log(region[1]);
console.log(region[2]);
console.log(region[3]);

dostaję:

Array [ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 5 więcej… ]
Array [ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 5 więcej… ] 
Array [ 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 5 więcej… ]
Array [ 146, 147 ]
0

Z kodem wszystko ok, jak sprawdzałem go pod moje obiekty zrobiłem błąd.

2

To się nazywa "chunkowanie tablic", wyszukaj sobie w Google "array chunk javascript" to dostaniesz dużo funkcji które to robią.

1 użytkowników online, w tym zalogowanych: 0, gości: 1