Как разбить строку (объект), чтобы «сохранить» в новом элементе? - PullRequest
0 голосов
/ 02 апреля 2019

Я получаю этот json-файл:

var data = [  
   {  
      "id":"1",      
      "yMonth":"201901",
   },
   {  
      "id":"2",      
      "yMonth":"201902",
   },
   {  
      "id":"3",      
      "yMonth":"201802",
   },
   {  
      "id":"4",      
      "yMonth":"202003",
   }
]

My yMonth содержит составные год и месяц (201901 -> год: 2019, месяц: 01).Итак, я пытаюсь разделить мои yMonth на две новые вещи, сортируя по year и month.

Чтобы получить этот вид возврата:

[  
    {  
      "id":"1",      
      "year":"2019",
      "month":"01",
    },
    {  
      "id":"2",      
      "year":"2019",
      "month":"02",
    },
    {  
      "id":"3",      
      "year":"2018",
      "month":"02",
    },
    {  
      "id":"4",      
      "year":"2020",
      "month":"03",
    }
]

Один из способов, которым я думал о поступке, начинался так:

data.forEach(item => {
  item.yMonth..... 
   //Split string, maybe save temporarily in aux variable, create a new array with: `year` and `month` items
 })

Кто-то может мне помочь?Я действительно потерялся в том, как это сделать

Ответы [ 4 ]

0 голосов
/ 02 апреля 2019

Это работает для меня

let index  = 2 //from where you want to split
data.map(d=>{
   d.month=d.yMonth.substring(0, index);
   d.year = d.yMonth.substring(index);
   delete yMonth;
  return d;
})
0 голосов
/ 02 апреля 2019

Итерируйте массив с Array.map(). На карте отделите yMonth от объекта с помощью деструктурирования и отдыха. Получите год и месяц, используя String.match() с RegExp, добавьте их к остальному объекту с распространением объекта:

const data = [{"id":"1","yMonth":"201901"},{"id":"2","yMonth":"201902"},{"id":"3","yMonth":"201802"},{"id":"4","yMonth":"202003"}]

const result = data.map(({ yMonth, ...rest }) => {
  const [, year, month] = yMonth.match(/(\d{4})(\d{2})/)
  
  return {
    ...rest,
    year,
    month,
  };
})

console.log(result)
0 голосов
/ 02 апреля 2019

Вы можете использовать функцию map, а внутри обработчика использовать функцию match для захвата года и месяца.

var data = [     {        "id":"1",            "yMonth":"201901",   },   {        "id":"2",            "yMonth":"201902",   },   {        "id":"3",            "yMonth":"201802",   },   {        "id":"4",            "yMonth":"202003",   }],
    result = data.map(({yMonth, ...attr}) => {
      var [year, month] = yMonth.match(/[0-9]{2,4}/g);  
      return {...attr, year, month};
    });

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 02 апреля 2019
 item.month = item.yMonth.slice(4);
 item.year = item.yMonth.slice(0, 4);
 delete item.yMonth;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...