Разбор массива объектов для форматирования данных - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть массив городов с этой структурой (взятый из CMS):

  const cities = [
    {
      city: 'Genova',
      coordinates: '{\'type\':\'Point\',\'coordinates\':[8.9473343,44.4023918]}',
      countryIsoCode: 'it',
      description: 'test',
      isInitialCity: true,
    }, {

      city: 'Barcelona',
      coordinates: '{\'type\':\'Point\',\'coordinates\':[2.0951271,41.3397004]}',
      countryIsoCode: 'es',
      description: 'description',
      isInitialCity: false,
    }, {
      city: 'Sydney',
      coordinates: '{type\':\'Point\',\'coordinates\':[151.2158203,-33.8704156]}',
      countryIsoCode: 'au',
      description: 'Sydney description',
      isInitialCity: false,
    }];

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

Вот что я пробовал:

cities.map(city=>JSON.parse(city.coordinates))

Но когда я печатаю, это, кажется, не дает никакого эффекта. Однако, если я вручную печатаю позицию, такую ​​как console.log(JSON.parse(cities[0].coordinates)), она показывает форматированный результат, как показано на следующем снимке экрана:

enter image description here

Как мне сделать это автоматически через l oop?

Ответы [ 4 ]

2 голосов
/ 27 апреля 2020

Это то, что я пробовал:

cities.map(city=>JSON.parse(city.coordinates))

map() создал вам совершенно новый, отдельный массив только с координатами, который вы потом отбросили.

Однако, если я вручную распечатаю позицию, такую ​​как console.log(JSON.parse(cities[0].coordinates)) [...] Как я могу сделать это автоматически через l oop?

Ну, поставьте это в al oop:

for(let city of cities)
  city.coordinates = JSON.parse(city.coordinates);


Однако данные вашего примера синтаксически неверны, в конце объектов есть ,} -s (после true / false) и предполагаемые данные JSON не JSON, как
{type':'Point','coordinates':[151.2158203,-33.8704156]}
     ^it has no pair, and it should be double quote anyway, all of them
{"type":"Point","coordinates":[151.2158203,-33.8704156]} <-- this is JSON
1 голос
/ 27 апреля 2020

 const cities = [
    {
      city: 'Genova',
      coordinates: '{\'type\':\'Point\',\'coordinates\':[8.9473343,44.4023918]}',
      countryIsoCode: 'it',
      description: 'test',
      isInitialCity: true,
    }, {

      city: 'Barcelona',
      coordinates: '{\'type\':\'Point\',\'coordinates\':[2.0951271,41.3397004]}',
      countryIsoCode: 'es',
      description: 'description',
      isInitialCity: false,
    }, {
      city: 'Sydney',
      coordinates: '{type\':\'Point\',\'coordinates\':[151.2158203,-33.8704156]}',
      countryIsoCode: 'au',
      description: 'Sydney description',
      isInitialCity: false,
    }];
     
    //for(let city of cities)
 // city.coordinates = JSON.parse(city.coordinates);
    
    
    var x=cities.map(city=>JSON.parse(JSON.stringify(city.coordinates)))
   
   
   console.log("result :"+(JSON.stringify(x)))
  //   result :["{'type':'Point','coordinates':[8.9473343,44.4023918]}","{'type':'Point','coordinates':[2.0951271,41.3397004]}","{type':'Point','coordinates':[151.2158203,-33.8704156]}"]
0 голосов
/ 27 апреля 2020

Я думаю, что может происходить то, что вы делаете карту правильно, но не возвращаете результат.

Например, mynumbers.map(num => num++) фактически не повлияет на mynumbers. Вы должны присвоить результат map другой переменной ...

const parsedCities = cities.map(city=>JSON.parse(city.coordinates))

Теперь ваша новая переменная parsedCities будет выглядеть так, как вы этого хотите, а исходный массив cities останется неизменным .

0 голосов
/ 27 апреля 2020

json .parse преобразует json в js объект. в вашем вопросе координаты не в json, потому что json не имеет одинарных кавычек (''), оно должно иметь либо двойные (""), либо никакие кавычки, попробуйте заменить ваши кавычки, и все будет работать нормально

...