Разделить объект и сгруппировать его - PullRequest
0 голосов
/ 16 марта 2019

Мне нужен правильный способ разбить этот объект и сгруппировать его.Заранее спасибо

let data = [{
    name: 'DAVID/JOHN',
    amount: '1231.21/131.93',
    identity: '1880/1332',
    address: 'first/second'
  }]

Ожидаемый результат

  let result = [
    {
      name: 'DAVID',
      amount: '1231.21',
      identity: '1880',
      address: 'first'
    },
    {
      name: 'JOHN',
      amount: '131.93',
      identity: '1332',
      address: 'second'
    }
  ]

Ответы [ 2 ]

3 голосов
/ 16 марта 2019

Здесь используется метод карты.

let data = [{
    name: 'DAVID/JOHN',
    amount: '1231.21/131.93',
    identity: '1880/1332',
    address: 'first/second'
  }]

let result = data.flatMap(e => {
  return e.name.split('/').map((v,i) => {
    return {
      name: v,
      amount: e.amount.split('/')[i],
      identity: e.identity.split('/')[i],
      address: e.address.split('/')[i]
    }
  });
});

console.log(result);
3 голосов
/ 16 марта 2019

Вы можете использовать [Array.flatMap()][1] или _.flatMap() от lodash для итерации массива, взять записей каждого объекта и разбить их на несколько объектов с помощью Array.reduce() и Array.forEach():

let data = [{
  name: 'DAVID/JOHN',
  amount: '1231.21/131.93',
  identity: '1880/1332',
  address: 'first/second'
}]

const result = data.flatMap(o =>
  Object.entries(o)
  .reduce((r, [k, v]) => {
    v.split('/').forEach((p, i) => {
      if (!r[i]) r[i] = {}

      r[i][k] = p;
    })

    return r
  }, [])
)

console.log(result)
...