解析对象数组以格式化数据

Parsing array of objects to format data

我有一组具有这种结构的城市(由 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)) 这样的位置,它会显示格式化结果,如下面的屏幕截图所示:

如何通过循环使其自动生成?

This is what I've tried:

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

map() 为您创建了一个全新的、仅包含坐标的独立数组,之后您将其丢弃。

However, if I manually print a position like console.log(JSON.parse(cities[0].coordinates)) [...] How can I make it automatically via loop?

好吧,把它放在一个循环中:

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

 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]}"]

我认为可能发生的情况是您正确地绘制了地图,但没有返回结果。

例如 mynumbers.map(num => num++) 根本不会影响 mynumbers。您必须将 map 的结果分配给另一个变量...

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

现在您的新 parsedCities 变量将看起来像您想要的那样,并且原始 cities 数组将保持不变。