Преобразовать данные массива в объект - PullRequest
0 голосов
/ 06 февраля 2020

поэтому у меня есть этот массив.

["2020-01-31 18:31:01", "2020-02-03 14:04:30", "2020-02-04 05:58:48", "2020-02-04 14:11:16"]

, и мне нравится преобразовывать его в объект.

0: {date: "2020-01-31", time: ["8:31:01"]}
1: {date: "2020-02-03", time: ["4:04:30"]}
2: {date: "2020-02-04", time: ["5:58:48", "14:11:16"]}

Но я получаю этот результат

0: {date: "2020-01-31", time: "8:31:01"}
1: {date: "2020-02-03", time: "4:04:30"}
2: {date: "2020-02-04", time: "5:58:48"}

Это мой код

var times = response.data.time;
var dates = [];
var t = [];
var d = '';
var newData = [];
times.forEach(time => {

   var da = time.substring(0, 10);
   var ti = time.substring(12, 19);

   if(d == da) {

     t.push(ti);

   } else {

     d = da

     var dt = {date: da, time: ti};
     newData.push(dt);

   }


 });

Мне трудно понять это, надеюсь, вы мне поможете.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 06 февраля 2020

Попробуйте использовать функцию Array.prototype.reduce:

const array = ["2020-01-31 18:31:01", "2020-02-03 14:04:30", "2020-02-04 05:58:48", "2020-02-04 14:11:16"];

const newData = array.reduce((acc, cur) => {
	const [date, time] = cur.split(' ');
	const dateObj = acc.find(e => e.date === date);
	if (dateObj) {
		dateObj.time.push(time);
	} else {
		acc.push({ date, time: [time] });
	}
	return acc;
}, []);

console.log(newData);
2 голосов
/ 06 февраля 2020

Почти копия решения Хао Ву, но более быстрая, поскольку она не зависит от линейного find. Значения накапливаются в объект, что позволяет быстро искать, а затем массив извлекается с помощью Object.values:

const array = ["2020-01-31 18:31:01", "2020-02-03 14:04:30", "2020-02-04 05:58:48", "2020-02-04 14:11:16"];

const newData = Object.values(array.reduce((acc, cur) => {
	const [date, time] = cur.split(' ');
	if (!acc[date]) {
    acc[date] = { date, time: [] };
  }
  acc[date].time.push(time);
	return acc;
}, {}));

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