Как объединить несколько объектов в один? - PullRequest
0 голосов
/ 21 марта 2020

Когда я выполняю http-запрос, я получаю массив объектов, например:

 [ 
  { row: '3', col: '1', val: '10:00' },
  { row: '3', col: '2', val: 'Some text' },
  { row: '3', col: '3', val: 'Yura' },
  { row: '3', col: '4', val: '676031383' },

  { row: '3', col: '6', val: '9:00 ' },
  { row: '3', col: '7', val: 'Some text' },
  { row: '3', col: '8', val: 'Alex' },
  { row: '3', col: '9', val: '965773775' },

  { row: '4', col: '1', val: '7:00' },
  { row: '4', col: '2', val: 'Some text' },
  { row: '4', col: '3', val: 'Anya' },
  { row: '4', col: '4', val: '951018689' },

  { row: '4', col: '6', val: '08:00' },
  { row: '4', col: '7', val: 'Some text' },
  { row: '4', col: '8', val: 'Dima' },
  { row: '4', col: '9', val: '961452584' },
]

Проблема в том, что мне нужно объединить эти объекты в один и добавить еще один ключ - тип , например:

{ time: 10:00, info: 'Some text', name: 'Yura', phone: '676031383', type: 'Driver' }

{ time: 9:00, info: 'Some text', name: 'Alex', phone: '965773775', type: 'Passenger' }

{ time: 7:00, info: 'Some text', name: 'Anya', phone: '951018689', type: 'Driver' }

{ time: 8:00, info: 'Some text', name: 'Dima', phone: '951018689', type: 'Passenger' }

От 1 до 4 тип должен быть "Водитель", от 6 до 9 должен быть "Пассажир". Ответ не имеет 5 столбца, потому что она пуста

Возможно ли это как-то сделать? Я провел несколько часов, но безрезультатно

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Полагаю, вы за этим следили:

const src = [{row:'3',col:'1',val:'10:00'},{row:'3',col:'2',val:'Some text'},{row:'3',col:'3',val:'Yura'},{row:'3',col:'4',val:'676031383'},{row:'3',col:'6',val:'9:00 '},{row:'3',col:'7',val:'Some text'},{row:'3',col:'8',val:'Alex'},{row:'3',col:'9',val:'965773775'},{row:'4',col:'1',val:'7:00'},{row:'4',col:'2',val:'Some text'},{row:'4',col:'3',val:'Anya'},{row:'4',col:'4',val:'951018689'},{row:'4',col:'6',val:'08:00'},{row:'4',col:'7',val:'Some text'},{row:'4',col:'8',val:'Dima'},{row:'4',col:'9',val:'961452584'},],

      res = [...src]
        .reduceRight((r,i,_,s) => (r.push(s.splice(0,4)),r),[])
        .map((e,i) => ({time: e[0].val, info: e[1].val, name:e[2].val, phone: e[3].val, type: i&1 ? 'Passenger' : 'Driver'}))

console.log(res)
.as-console-wrapper{min-height:100%;}
0 голосов
/ 22 марта 2020

Я изменил формат вывода, так как вы можете легко получить необходимые данные для манипуляции. Здесь я прилагаю код. Пожалуйста, не стесняйтесь комментировать, если он не соответствует вашим требованиям.

const data = [ 
	{ row: '3', col: '1', val: '10:00' },
	{ row: '3', col: '2', val: 'Some text' },
	{ row: '3', col: '3', val: 'Yura' },
	{ row: '3', col: '4', val: '676031383' },
  
	{ row: '3', col: '6', val: '9:00 ' },
	{ row: '3', col: '7', val: 'Some text' },
	{ row: '3', col: '8', val: 'Alex' },
	{ row: '3', col: '9', val: '965773775' },

	{ row: '4', col: '1', val: '10:00' },
	{ row: '4', col: '2', val: 'Some text' },
	{ row: '4', col: '3', val: 'Yura' },
	{ row: '4', col: '4', val: '676031383' },
  
	{ row: '4', col: '6', val: '9:00 ' },
	{ row: '4', col: '7', val: 'Some text' },
	{ row: '4', col: '8', val: 'Alex' },
	{ row: '4', col: '9', val: '965773775' },
];

const result = {}
data.forEach(v => result[v.row] = {driver: {}, passenger: {}});

data.forEach(value => {
	if (value.col === '1')      result[value.row].driver.time = value.val;
	else if (value.col === '2') result[value.row].driver.info = value.val;
	else if (value.col === '3') result[value.row].driver.name = value.val;
	else if (value.col === '4') result[value.row].driver.phone = value.val;
	else if (value.col === '6') result[value.row].passenger.time = value.val;
	else if (value.col === '7') result[value.row].passenger.info = value.val;
	else if (value.col === '8') result[value.row].passenger.name = value.val;
	else if (value.col === '9') result[value.row].passenger.phone = value.val;
});

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...