将Javascript响应转换为Array/Map

Convert Javascript response to Array/Map

本文关键字:Array Map 转换 Javascript 响应      更新时间:2023-09-26

我从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                    
                })
            }];

假设数据存储在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
    } //, ...
]

您似乎不太了解Javascript中的Object语法;为了让我的答案更有意义,你不妨读一读。

现在你对对象有了更多的了解,你应该很清楚你想要的东西看起来像:

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函数。

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

我是开源项目的作者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
           }
         });