• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Tworzenie tablicy z wybranych obiektów

Object Storage Arubacloud
0 głosów
1,146 wizyt
pytanie zadane 30 lipca 2019 w JavaScript przez niezalogowany
zamknięte 30 lipca 2019 przez Comandeer

Witam jak stworzyć tablice składającą się z wybranych obiektów pobranych z pliku JSON. poniżej daje plik z danymi

{
    "teams": [
        {
            "team": "Arsenal",
            "players": [
                {
                    "name": "Mesut Ozil"
                },
                {
                    "name": "Nacho Monreal"
                }
            ]
        },
        {
            "team": "Aston Villa",
            "players": [
                {
                    "name": "Jack Grealish"
                },
                {
                    "name": "Ahmed Elmohamady"
                }
            ]
        },
        {
            "team": "Bournemouth",
            "players": [
                {
                    "name": "Artur Boruc"
                },
                {
                    "name": "Jordon Ibe"
                }
            ]
        }

    ]
}

Chciałbym z tego pliku "wyjąć" wszystkie obiekty co mają name i umieścić je jeden po drugim w tablicy. Pytanie czy można dostać się do całego obiektu i go skopiować czy można tylko dostać się do konkretnej wartości czyt. "name". Nie wiem czy nie najlepszą opcją byłoby użycie metody Array.from która jak mówi definicja: 

"Array.from() lets you create Arrays from:

array-like objects (objects with a length property and indexed elements) or
iterable objects (objects where you can get its elements, such as Map and Set)."

w tym przypadku plik dane z JSON'a są "Array-like" ?

1 odpowiedź

+1 głos
odpowiedź 30 lipca 2019 przez ScriptyChris Mędrzec (190,190 p.)

Przyjmuję, że cały obiekt, który umieściłeś przypisany będzie do zmiennej o nazwie json.

Można to zrobić na kilka sposobów, m.in.:

  • zwykłe pętle for
const playerNames = [];

for (let i = 0; i < json.teams.length; i++) {
	const team = json.teams[i];

	for (let j = 0; j < team.players.length; j++) {
        playerNames.push(team.players[j].name);
    }
}
const names = [];

json.teams.forEach(team => {
    team.players.forEach(player => names.push(player.name))
});
const playerNames = json.teams.map(team => {
	const players = team.players.map(player => player.name);
	return players;
}).flat();
const playerNames = json.teams.flatMap(team => {
	const players = team.players.map(player => player.name);
	return players;
});
const playerNames = json.teams.reduce((names, team) => {
	const players = team.players.map(player => player.name); 
	names.push(...players); 
	return names;
}, []);

Użycie Array.from miało by sens, gdybyś tym obiektom nadał property length o nieujemnej liczbie całkowitej.

komentarz 30 lipca 2019 przez niezalogowany
const playerArray = [
    {
        name: "zawodnik",
        image: "ścieżka do obrazka"
    },
    {
        name: "zawodnik",
        image: "ścieżka do obrazka"
    },
    {
        name: "zawodnik",
        image: "ścieżka do obrazka"
    },
    {
        name: "zawodnik",
        image: "ścieżka do obrazka"
    },
    {
        name: "zawodnik",
        image: "ścieżka do obrazka"
    },
]

właściwości które znajdują się w tych obiektach mają być pobierane z pliku JSON.

komentarz 30 lipca 2019 przez ScriptyChris Mędrzec (190,190 p.)

To wygląda jak łączenie 2 osobnych struktur danych. Będziesz musiał identyfikować, do którego obiektu zawodnika dodać którą wartość property image. Jak wygląda struktura danych zawierająca pola image?

komentarz 30 lipca 2019 przez niezalogowany

JSON:

"teams": [
        {
            "team": "Arsenal",
            "players": [
                {
                    "name": "Mesut Ozil",
                    "image": "./src/assets/image/image.jpg"
                },
            ]
        }
]

 

komentarz 30 lipca 2019 przez ScriptyChris Mędrzec (190,190 p.)

Przecież to praktycznie ta sama struktura danych, którą podałeś w pytaniu. Biorąc więc przykład z pętlą for z mojej odpowiedzi i rozszerzając dodanie pola image:

const playerNames = [];
 
for (let i = 0; i < json.teams.length; i++) {
    const team = json.teams[i];
 
    for (let j = 0; j < team.players.length; j++) {
        playerNames.push({
            name: team.players[j].name,
            image: team.players[j].image
        });
    }
}

 

komentarz 30 lipca 2019 przez niezalogowany
Dużo pomogłeś, dzięki za pomoc :)

Podobne pytania

0 głosów
1 odpowiedź 291 wizyt
pytanie zadane 14 marca 2022 w PHP przez AnimaVillis Stary wyjadacz (11,510 p.)
0 głosów
0 odpowiedzi 144 wizyt
0 głosów
0 odpowiedzi 423 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...