【问题标题】:Parsing array of objects to format data解析对象数组以格式化数据
【发布时间】:2020-08-10 17:43:24
【问题描述】:

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

如何通过循环自动实现?

【问题讨论】:

    标签: javascript json loops ecmascript-6 netlify-cms


    【解决方案1】:

    这是我尝试过的:

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

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

    但是,如果我手动打印像 console.log(JSON.parse(cities[0].coordinates)) 这样的位置 [...] 如何通过循环自动打印?

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

    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
    

    【讨论】:

    • 谢谢,它有效。有没有办法使用单行循环(forEach 等)?
    • for..of 在我看来是一个比forEach()“更多的单行循环”,但除此之外是:cities.forEach(city-&gt;city.coordinates=JSON.parse(city.coordinates));
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 感谢您的回答。但是,使用单行语句时,返回值在 `=>` 下。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多