Javascript- 从包含某个对象的数组中读取数据

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

我无法处理从其他对象读取数据的问题。

这是数据。遗憾的是,这不是英文的,但我认为这无关紧要。

[
  {
    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,
  },
];

问题是,如果我想读取“termeknev”的数据,我会得到

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

我认为问题出在“null”是另一个数组,但我尝试了很多方法都无法修复它。

有人可以帮助我吗?

持平

如果您不需要维护嵌套数组,您可以使用 Array#flat() and then map() 展平外部数组以检索所需的 属性.

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);

嵌套(已知深度)

如果您需要维护嵌套数组并且您知道只有两层嵌套,您可以使用嵌套 map() 调用

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);

递归(任意深度)

如果嵌套可以任意深,您可以编写一个接受回调的递归映射函数。

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);

数据中的第二个和第三个元素的类型是 array 而不是 object

因此,如果您只是获得像 data[1].termeknev 这样的值,它将 return 为空,因为 data[1] 中没有 属性 termeknev。您需要像 data[1][0].termeknev.

一样访问它

如果您正在遍历数据数组,只需在每次迭代中检查元素是否为 array 类型,如果是,您需要遍历该嵌套数组以获取实际值。