JavaScript ES6 анализирует вложенные строки с разделителями по ключу / значениям - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть следующий массив объектов:

var addresses = [ 
  { ResourceId: 2,
    OfficeAddress:
     '20 Main Street\r\nRiverside\r\nUSA' },
  { ResourceId: 191,
    OfficeAddress:
     '20 Main Street\r\nRiverside\r\nUSA' },
  { ResourceId: 204,
    OfficeAddress:
     '20 Main Street\r\nRiverside\r\nUSA' }
]

Я хочу попробовать разбить строку на их собственные пары ключ / значение в объекте, вот так:

[ 
  { ResourceId: 2,
    address1: "20 Main Street",
    address2: "Riverside",
    address3: "USA"
    },
  { ResourceId: 191,
    address1: "20 Main Street",
    address2: "Riverside",
    address3: "USA"
    },
  { ResourceId: 204,
    address1: "20 Main Street",
    address2: "Riverside",
    address3: "USA"
    }
]

Я мог бы сделать что-то вроде этого, если бы это было ПРОСТО нормальной строкой:

let output = addresses.split("\r").reduce(function(
        obj,
        str,
        index
      ) {
        let strParts = str.split(":");
        obj[strParts[0].replace(/\s+/g, "")] = strParts[1];
        return obj;
      },
      {});

Кто-нибудь знает, как я мог бы перебрать каждый объект в массиве и разбить строку на 3значение адреса / ключи?Карта. Возможно?

1 Ответ

0 голосов
/ 21 ноября 2018

Я думаю, map() - это путь, так как вы хотите массив с элементом для каждого входа.Просто создайте новый объект с каждой итерацией:

var addresses = [ { ResourceId: 2,OfficeAddress:'20 Main Street\r\nRiverside\r\nUSA' },{ ResourceId: 191,OfficeAddress:'20 Main Street\r\nRiverside\r\nUSA' },{ ResourceId: 204,OfficeAddress:'20 Main Street\r\nRiverside\r\nUSA' }]

let newArray= addresses.map(({ResourceId,OfficeAddress }) => {
    let [address1, address2, address3] = OfficeAddress.split('\r\n')
    return {ResourceId, address1, address2, address3}
})
console.log(newArray)

Вы также можете рассмотреть возможность сохранения адреса в массиве, а не по отдельности именованных свойств:

var addresses = [ { ResourceId: 2,OfficeAddress:'20 Main Street\r\nRiverside\r\nUSA' },{ ResourceId: 191,OfficeAddress:'20 Main Street\r\nRiverside\r\nUSA' },{ ResourceId: 204,OfficeAddress:'20 Main Street\r\nRiverside\r\nUSA' }]

let newArray= addresses.map(({ResourceId,OfficeAddress }) => {
    let address = OfficeAddress.split('\r\n')
    return {ResourceId, address}
})
console.log(newArray)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...