将Javascript响应转换为数组/映射
我有来自Javascript ElasticSearch查询的以下响应,我需要将其映射到下面的结构。有没有比我现在做的更有效的方法 谢谢 我需要映射到的结构:(其中大约700个) 正在返回的我的数据的当前结构:将Javascript响应转换为数组/映射,javascript,arrays,object,dictionary,
elasticsearch,Javascript,Arrays,Object,Dictionary,
elasticsearch,我有来自Javascript ElasticSearch查询的以下响应,我需要将其映射到下面的结构。有没有比我现在做的更有效的方法 谢谢 我需要映射到的结构:(其中大约700个) 正在返回的我的数据的当前结构: [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object] 0: Object _id: "4" _index: "locationIndex" _score: 1 _sou
[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
})
}];
我正在尝试但失败的内容:
[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中的对象语法;为了使我的回答最有意义,你可能希望对它们稍加说明 现在,您对对象有了更多的了解,应该很清楚您想要的是:
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
});
}
var结果=[];
对于(变量i=0,len=data.length;i
为了获得额外的好处,您可以包括一个类似jQuery的JS框架,只需使用uase即可。我是开源项目的作者。 你可以很容易地做这样的事情来做你想做的事
var result = jinqJs().from(data5).select(function(row){
return {coordinates: [row.coordinates[0]['0'], row.coordinates[0]['1']],
name: row.name,
population: row.population
}
});
我最喜欢Marcos地图解决方案,但也最可能和最快的是使用
Array.from(data)
。这在过去帮助我将响应API数据转换为数组,但现在还不是。实际上,本机JavaScriptAarray
对象已经有了.map
方法。这取决于浏览器支持。我仍然需要与使用IE8的公司打交道,例如,IE8不支持[].map():)我通常倾向于放弃对IE的支持,但您可以自己将其定义为一个回退:if(!Array.prototype.map)Array.prototype.map=function(callback){for(var I=0;I