Home > database >  Javascript- Reading data from an array with some object in it
Javascript- Reading data from an array with some object in it

Time:03-28

I cant deal with a problem to read the datas int an other object.

This is the data. This is sadly not in english but i think its doesent matter.

[
  {
    termeknev: 'Adatmegosztó',
    besorszam: 'TESZOR 61.20.42',
    mennyegys: 'hó',
    menny: 1,
    nettoegysegar: '543,30',
    nettoar: '543,30',
    afakulcs: 5,
    afaertek: '27,16',
    bruttoar: '570,46',
    id: 1,
  },
  [
    {
      termeknev: 'Üzleti elõfizetés',
      besorszam: 'TESZOR 61.20.12',
      mennyegys: 'hó',
      menny: 1,
      nettoegysegar: '6000,00',
      nettoar: '6000,00',
      afakulcs: 27,
      afaertek: '1620,00',
      bruttoar: '7620,00',
      id: 2,
    },
    {
      termeknev: 'Üzleti elõfizetés',
      besorszam: 'TESZOR 61.20.12',
      mennyegys: 'hó',
      menny: 1,
      nettoegysegar: '1000,00',
      nettoar: '1000,00',
      afakulcs: 27,
      afaertek: '270,00',
      bruttoar: '1270,00',
      id: 3,
    },
    {
      termeknev: 'Vállalati Hipernet Start',
      besorszam: 'TESZOR 61.20.42',
      mennyegys: 'hó',
      menny: 1,
      nettoegysegar: '2669,29',
      nettoar: '2669,29',
      afakulcs: 5,
      afaertek: '133,46',
      bruttoar: '2802,75',
      id: 4,
    },
    {
      termeknev: 'Korlátlan sebesség&adat opció',
      besorszam: 'TESZOR 61.20.42',
      mennyegys: 'hó',
      menny: 1,
      nettoegysegar: '2362,20',
      nettoar: '2362,20',
      afakulcs: 5,
      afaertek: '118,11',
      bruttoar: '2480,31',
      id: 5,
    },
  ],
  [
    {
      termeknev: 'Üzleti elõfizetés',
      besorszam: 'TESZOR 61.20.12',
      mennyegys: 'hó',
      menny: 1,
      nettoegysegar: '6000,00',
      nettoar: '6000,00',
      afakulcs: 27,
      afaertek: '1620,00',
      bruttoar: '7620,00',
      id: 12,
    },
    {
      termeknev: 'Üzleti elõfizetés',
      besorszam: 'TESZOR 61.20.12',
      mennyegys: 'hó',
      menny: 1,
      nettoegysegar: '1000,00',
      nettoar: '1000,00',
      afakulcs: 27,
      afaertek: '270,00',
      bruttoar: '1270,00',
      id: 13,
    },
    {
      termeknev: 'Vállalati Hipernet Start',
      besorszam: 'TESZOR 61.20.42',
      mennyegys: 'hó',
      menny: 1,
      nettoegysegar: '2669,29',
      nettoar: '2669,29',
      afakulcs: 5,
      afaertek: '133,46',
      bruttoar: '2802,75',
      id: 14,
    },
  ],
  {
    termeknev: 'Autóskártya',
    besorszam: 'TESZOR 61.20.12',
    mennyegys: 'hó',
    menny: 1,
    nettoegysegar: '1000,00',
    nettoar: '1000,00',
    afakulcs: 27,
    afaertek: '270,00',
    bruttoar: '1270,00',
    id: 20,
  },
];

The problem is that if I want to read the data of "termeknev" I get the

[  "Adatmegosztó",  null,  null,  "Autóskártya" ]

I think the problem is at the "null" is another array but I tried many ways and I cant fix it.

Can someone help me?

CodePudding user response:

The second and third element in the data are type array not object.

So if you just get the value like data[1].termeknev it will return null because there is no property termeknev in data[1]. You need to acces it like data[1][0].termeknev.

If you are iterating through the data array, just check in each iteration if element is type array, if It is, you need to iterate through that nested array to get the actual values.

CodePudding user response:

Flat

If you don't need to maintain the nested arrays you can flatten the outer array using Array#flat() and then map() it to retrieve the desired property.

const input = [{ termeknev: 'Adatmegosztó', besorszam: 'TESZOR 61.20.42', mennyegys: 'hó', menny: 1, nettoegysegar: '543,30', nettoar: '543,30', afakulcs: 5, afaertek: '27,16', bruttoar: '570,46', id: 1, }, [{ termeknev: 'Üzleti elõfizetés', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '6000,00', nettoar: '6000,00', afakulcs: 27, afaertek: '1620,00', bruttoar: '7620,00', id: 2, }, { termeknev: 'Üzleti elõfizetés', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '1000,00', nettoar: '1000,00', afakulcs: 27, afaertek: '270,00', bruttoar: '1270,00', id: 3, }, { termeknev: 'Vállalati Hipernet Start', besorszam: 'TESZOR 61.20.42', mennyegys: 'hó', menny: 1, nettoegysegar: '2669,29', nettoar: '2669,29', afakulcs: 5, afaertek: '133,46', bruttoar: '2802,75', id: 4, }, { termeknev: 'Korlátlan sebesség&adat opció', besorszam: 'TESZOR 61.20.42', mennyegys: 'hó', menny: 1, nettoegysegar: '2362,20', nettoar: '2362,20', afakulcs: 5, afaertek: '118,11', bruttoar: '2480,31', id: 5, },], [{ termeknev: 'Üzleti elõfizetés', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '6000,00', nettoar: '6000,00', afakulcs: 27, afaertek: '1620,00', bruttoar: '7620,00', id: 12, }, { termeknev: 'Üzleti elõfizetés', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '1000,00', nettoar: '1000,00', afakulcs: 27, afaertek: '270,00', bruttoar: '1270,00', id: 13, }, { termeknev: 'Vállalati Hipernet Start', besorszam: 'TESZOR 61.20.42', mennyegys: 'hó', menny: 1, nettoegysegar: '2669,29', nettoar: '2669,29', afakulcs: 5, afaertek: '133,46', bruttoar: '2802,75', id: 14, },], { termeknev: 'Autóskártya', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '1000,00', nettoar: '1000,00', afakulcs: 27, afaertek: '270,00', bruttoar: '1270,00', id: 20, },];

const termeknevFlat = input.flat().map(({ termeknev }) => termeknev);
console.log('Flat:', termeknevFlat);

Nested (known depth)

If you need to maintain the nested arrays and you know there are only 2 levels of nesting, you can use nested map() calls

const input = [{ termeknev: 'Adatmegosztó', besorszam: 'TESZOR 61.20.42', mennyegys: 'hó', menny: 1, nettoegysegar: '543,30', nettoar: '543,30', afakulcs: 5, afaertek: '27,16', bruttoar: '570,46', id: 1, }, [{ termeknev: 'Üzleti elõfizetés', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '6000,00', nettoar: '6000,00', afakulcs: 27, afaertek: '1620,00', bruttoar: '7620,00', id: 2, }, { termeknev: 'Üzleti elõfizetés', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '1000,00', nettoar: '1000,00', afakulcs: 27, afaertek: '270,00', bruttoar: '1270,00', id: 3, }, { termeknev: 'Vállalati Hipernet Start', besorszam: 'TESZOR 61.20.42', mennyegys: 'hó', menny: 1, nettoegysegar: '2669,29', nettoar: '2669,29', afakulcs: 5, afaertek: '133,46', bruttoar: '2802,75', id: 4, }, { termeknev: 'Korlátlan sebesség&adat opció', besorszam: 'TESZOR 61.20.42', mennyegys: 'hó', menny: 1, nettoegysegar: '2362,20', nettoar: '2362,20', afakulcs: 5, afaertek: '118,11', bruttoar: '2480,31', id: 5, },], [{ termeknev: 'Üzleti elõfizetés', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '6000,00', nettoar: '6000,00', afakulcs: 27, afaertek: '1620,00', bruttoar: '7620,00', id: 12, }, { termeknev: 'Üzleti elõfizetés', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '1000,00', nettoar: '1000,00', afakulcs: 27, afaertek: '270,00', bruttoar: '1270,00', id: 13, }, { termeknev: 'Vállalati Hipernet Start', besorszam: 'TESZOR 61.20.42', mennyegys: 'hó', menny: 1, nettoegysegar: '2669,29', nettoar: '2669,29', afakulcs: 5, afaertek: '133,46', bruttoar: '2802,75', id: 14, },], { termeknev: 'Autóskártya', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '1000,00', nettoar: '1000,00', afakulcs: 27, afaertek: '270,00', bruttoar: '1270,00', id: 20, },];

const termeknevNested = input.map(o =>
  Array.isArray(o)
    ? o.map(({ termeknev }) => termeknev)
    : o.termeknev
);
console.log('\nNested:', termeknevNested);

Recursive (arbitrary depth)

If the nesting can be arbitrarily deep you can write a recursive map function which accepts a callback.

const input = [{ termeknev: 'Adatmegosztó', besorszam: 'TESZOR 61.20.42', mennyegys: 'hó', menny: 1, nettoegysegar: '543,30', nettoar: '543,30', afakulcs: 5, afaertek: '27,16', bruttoar: '570,46', id: 1, }, [{ termeknev: 'Üzleti elõfizetés', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '6000,00', nettoar: '6000,00', afakulcs: 27, afaertek: '1620,00', bruttoar: '7620,00', id: 2, }, { termeknev: 'Üzleti elõfizetés', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '1000,00', nettoar: '1000,00', afakulcs: 27, afaertek: '270,00', bruttoar: '1270,00', id: 3, }, { termeknev: 'Vállalati Hipernet Start', besorszam: 'TESZOR 61.20.42', mennyegys: 'hó', menny: 1, nettoegysegar: '2669,29', nettoar: '2669,29', afakulcs: 5, afaertek: '133,46', bruttoar: '2802,75', id: 4, }, { termeknev: 'Korlátlan sebesség&adat opció', besorszam: 'TESZOR 61.20.42', mennyegys: 'hó', menny: 1, nettoegysegar: '2362,20', nettoar: '2362,20', afakulcs: 5, afaertek: '118,11', bruttoar: '2480,31', id: 5, }, [{ termeknev: 'Üzleti elõfizetés', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '6000,00', nettoar: '6000,00', afakulcs: 27, afaertek: '1620,00', bruttoar: '7620,00', id: 2, }, { termeknev: 'Üzleti elõfizetés', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '1000,00', nettoar: '1000,00', afakulcs: 27, afaertek: '270,00', bruttoar: '1270,00', id: 3, }, { termeknev: 'Vállalati Hipernet Start', besorszam: 'TESZOR 61.20.42', mennyegys: 'hó', menny: 1, nettoegysegar: '2669,29', nettoar: '2669,29', afakulcs: 5, afaertek: '133,46', bruttoar: '2802,75', id: 4, }, { termeknev: 'Korlátlan sebesség&adat opció', besorszam: 'TESZOR 61.20.42', mennyegys: 'hó', menny: 1, nettoegysegar: '2362,20', nettoar: '2362,20', afakulcs: 5, afaertek: '118,11', bruttoar: '2480,31', id: 5, },]], [{ termeknev: 'Üzleti elõfizetés', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '6000,00', nettoar: '6000,00', afakulcs: 27, afaertek: '1620,00', bruttoar: '7620,00', id: 12, }, { termeknev: 'Üzleti elõfizetés', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '1000,00', nettoar: '1000,00', afakulcs: 27, afaertek: '270,00', bruttoar: '1270,00', id: 13, }, { termeknev: 'Vállalati Hipernet Start', besorszam: 'TESZOR 61.20.42', mennyegys: 'hó', menny: 1, nettoegysegar: '2669,29', nettoar: '2669,29', afakulcs: 5, afaertek: '133,46', bruttoar: '2802,75', id: 14, },], { termeknev: 'Autóskártya', besorszam: 'TESZOR 61.20.12', mennyegys: 'hó', menny: 1, nettoegysegar: '1000,00', nettoar: '1000,00', afakulcs: 27, afaertek: '270,00', bruttoar: '1270,00', id: 20, },];


const recursiveMap = (arr, cb) =>
  arr.map((obj, i, _arr) =>
    Array.isArray(obj)
      ? recursiveMap(obj, cb)
      : cb(obj, i, _arr)
  )

const termeknevRecursive = recursiveMap(input, ({ termeknev }) => termeknev);
console.log('\nRecursive:', termeknevRecursive);

  • Related