【问题标题】:Convert Javascript response to Array/Map将 Javascript 响应转换为 Array/Map
【发布时间】:2015-03-30 16:35:22
【问题描述】:

我有来自 Javascript ElasticSearch 查询的以下响应,我需要将其映射到以下结构。有没有比我目前正在做的更有效的方法?

谢谢

我需要映射到的结构:(其中大约 700 个)

[{
    "coordinates": ["48", "37"],
    "name": "something",
    "population": "501"
},

我返回的数据的当前结构:

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]

0: Object

 _id: "4"
 _index: "locationIndex"
 _score: 1
 _source: Object
   coordinates: Array[2]
       0: -77.080597
       1: 38.892899
       length: 2
       __proto__: Array[0]
 name: "someName"
 population: 57205
1: Object
 ...

我正在尝试但失败了:

 var results= [{
                "key": 'coordinates',
                resp.coordiantes[0],
                resp.coordinates[1],
                "key": 'name',
                resp.name                    
                })
            }];

【问题讨论】:

    标签: javascript arrays object dictionary elasticsearch


    【解决方案1】:

    假设您的数据存储在myData 变量中,您可以使用Array.prototype.map 方法来操作它并实现您想要的。这是一个解决方案:

    result = myData.map(function(obj) {
        return {
            coordinates: obj._source.coordinates,
            name: obj.name,
            population: obj.population
        }
    });
    

    就这么简单!结果将是这样的:

    [
        {
            "coordinates": [-77.080597, 38.892899],
            "name": "some name",
            "population": 52701
        },
        {
            "coordinates": [-54.930299, 30.992833],
            "name": "some name 2",
            "population": 84229
        },
        {
            "coordinates": [-82.001438, -5.38131],
            "name": "some name 3",
            "population": 5991
        } //, ...
    ]
    

    【讨论】:

      【解决方案2】:

      您似乎不太了解 Javascript 中的对象语法;为了让我的回答最有意义,您不妨read up 了解一下。

      现在您对 Objects 有了更多了解,应该很清楚您想要的内容类似于:

      var results = [];
      for (var i = 0, len = data.length; i < len; i++)
      {
          var resp = data[i];
          results.push({
              'coordinates':resp['source']['coordinates'],
              'name':resp.name,
              'population':resp.population
          });
      }
      

      对于奖励积分,您可以包含一个像 jQuery 这样的 JS 框架,然后使用 map function

      【讨论】:

      • 其实原生 JavaScript Aarray 对象已经有了一个.map 方法。
      • 这取决于浏览器的支持。我仍然必须与使用 IE8 的公司打交道,例如,不使用 IE8support [].map()。 :)
      • 我通常倾向于放弃对 IE 的支持,但您始终可以将其定义为后备:if (!Array.prototype.map) Array.prototype.map = function(callback) { for (var i=0; i &lt; this.length; i++) this[i] = callback(this[i]); };
      【解决方案3】:

      我最喜欢 Marcos 地图解决方案,但也可以使用 Array.from(data)。这帮助我在过去转换了应该是数组但还没有的响应 API 数据。

      【讨论】:

        【解决方案4】:

        我是开源项目http://www.jinqJs.com的作者。 你可以轻松地做这样的事情来做你想做的事。

        var result = jinqJs().from(data5).select(function(row){
            return {coordinates: [row.coordinates[0]['0'], row.coordinates[0]['1']],
                    name: row.name,
                    population: row.population
                   }
                 });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-02-02
          • 2011-05-20
          • 1970-01-01
          • 2019-03-30
          • 2022-01-18
          • 2019-03-22
          • 1970-01-01
          • 2019-01-01
          相关资源
          最近更新 更多