Filtrowanie i destrukturyzacja obiektów

Filtrowanie i destrukturyzacja obiektów
rafal95p
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:157
0

Mam taki obiekt:

Kopiuj
const obiekt = [
			{
			"type":"text",
     		"source":"A",
			},
			{
			"type":"photo",
   			"source":"B",
			},
			{
			"type":"text",
			"source":"B",
			},
   ]

Chciałbym teraz odfiltrować sobie te elementy, których type === "text", a następnie za pomocą destrukturyzacjacji przepisać do innego obiektu w celu dalszej obróbki.

Czyli coś takiego (uwaga: kod celowo błędny):
obiekt.filter(obiekt.type=="text").forEach(el => {// do something with text type})

edytowany 2x, ostatnio: Riddle
rafal95p
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:157
0

Takie coś wydaje się działać. Aczkolwiek może istnieje jakiś inny "sprytniejszy i pr0" sposób?

obiekt.forEach(el => {if (el.type === "text") {// proceed with text type} else {//proceed with not text type} })

edytowany 1x, ostatnio: rafal95p
SZ
filter, nie forEach
Xarviel
  • Rejestracja:ponad 3 lata
  • Ostatnio:dzień
  • Postów:847
1

Robimy sobie tablice obiektów

Kopiuj
const collections = [
  { type:"text", source:"A" },
  // ...
];

i dane możemy filtrować na kilkanaście sposobów w zależności od tego co chcesz z nimi dalej zrobić

  1. Kopiuj
    const textData = collections.filter(({ type }) => type === 'text');
    const photoData = collections.filter(({ type }) => type === 'photo');
    
    textData.forEach(({ type, source }) => {
      console.log(type, source);
    });
    
    photoData.forEach(({ type, source }) => {
      // ...
    });
    
  2. Kopiuj
    collections.forEach(({ type, source }) => {
      if (type === 'text') {
        // ...
      } else {
        // ...
      }
    })
    
  3. Kopiuj
    for (const { type, text } of collections) {
      if (type === 'text') {
          // ...
      }
    }
    
  4. ...

SZ
  • Rejestracja:ponad 14 lat
  • Ostatnio:27 minut
  • Postów:181
1
Kopiuj
obiekt.filter(i => i.type === "text").map(i => ({...i}));

Map tworzy ci nowe obiekty na podstawie starego

LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:2 minuty
  • Postów:8422
0
rafal95p napisał(a):

Chciałbym teraz odfiltrować sobie te elementy, których type === "text", a następnie za pomocą destrukturyzacjacji przepisać do innego obiektu w celu dalszej obróbki.

Niepotrzebna ci do tego destrukturyzacja.


edytowany 1x, ostatnio: LukeJL
rafal95p
Dane wejściowe to JSON, które chciałem - część z nich - przepisać do programu jako obiekt. Czyli read data, parse data, use data.
LukeJL
no tak, ale co ma do tego destructuring?
rafal95p
Zamiast data = {a : inputData.a, b : inputData.b, c : inputData.c} wystarczy data = {a,b,c}=inputData
LukeJL
No tak, ale to tylko szczegół implementacyjny, cukier składniowy.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.