Javascript 如何将对象传递给函数并将结果返回给原始函数
所以我正在解析一个有地址对象的csv文件。然后我想把这个地址发送给我的另一个功能,它会转到一个网站,并获取地址的lat/lng。然后,我希望该函数返回lat/lng,并将其添加为数组中location对象的子对象 到目前为止,我看到的是正在解析CSV并提取address对象。我有发送地址和获取lat/lng的功能……但我不知道如何将它们优雅地连接在一起。我想我可以只做一个巨大的功能,但我想让它更干净 我的事件数组如下所示:Javascript 如何将对象传递给函数并将结果返回给原始函数,javascript,Javascript,所以我正在解析一个有地址对象的csv文件。然后我想把这个地址发送给我的另一个功能,它会转到一个网站,并获取地址的lat/lng。然后,我希望该函数返回lat/lng,并将其添加为数组中location对象的子对象 到目前为止,我看到的是正在解析CSV并提取address对象。我有发送地址和获取lat/lng的功能……但我不知道如何将它们优雅地连接在一起。我想我可以只做一个巨大的功能,但我想让它更干净 我的事件数组如下所示: reportType: 'OFFENSE 2.0',
reportType: 'OFFENSE 2.0',
reportNumber: '15021912',
offense: '3301',
description: 'Driving on Right Side of Roadway.',
dateTime: '02/06/2015',
location:
{ block: '02:03 Greentree Rd & Mansfield Ave',
zone: 'Outside City' },
person: { age: 'OSC', sex: 'N/A' } }
CSV解析的代码在这里
function makeURL() {
var date = new Date();
var today = date.getDay();
var day = daysOfTheWeek[today];
link = 'http://apps.pittsburghpa.gov/police/arrest_blotter/arrest_blotter_' + day + '.csv'
return link
}
var url = makeURL();
function getURL() {
http.get(url, function(res) {
if(res.statusCode === 200) {
res.pipe(parser);
} else {
console.error('The address is unavailable. (%d)', res.statusCode);
}
})
}
var parser = parse(function(err, data) {
for(i = 1; i < data.length; i++) {
var info = data[i]
if(info[7] === 'OSC') {
info[7] = 'Outside City Limits'
}
if(info[9] === '') {
info[9] = 'N/A'
}
if(info[8] === '') {
info[8] = 'N/A'
}
var incident = {
reportType: info[0],
reportNumber: info[1],
offense: info[2],
description: info[3],
dateTime: info[4],
location: {
block: info[5] + " " + info[6],
zone: info[7],
},
person: {
age: info[8],
sex: info[9]
}
}
var passLoc = info[5];
passLoc = passLoc.replace('block ','')
passLoc = passLoc.replace(/ /g,"+")
console.log(incident);
// console.log(passLoc);
}
});
获取Lat/lng的代码如下:
function getLoc() {
for(i = 0; i < locy.length; i++) {
var address = locy[i]
var url = "http://geodata.alleghenycounty.us/arcgis/rest/services/Geocoders/EAMS_Composite_Loc/GeocodeServer/findAddressCandidates?Street=" + address + "&City=Pittsburgh&State=PA&ZIP=&SingleLine=&outFields=&outSR=4326&searchExtent=&f=pjson";
http.get(url, function(res) {
var data = '';
res.on('data', function(chunk) {
data += chunk;
});
res.on('end', function() {
var d = JSON.parse(data);
var obj = d.candidates;
if(obj != '') {
var loc = obj[0].location
var location = {
lat: loc.x,
lng: loc.y
}
return location
} else {
return address
}
});
res.on('error', function(err) {
console.log("error!")
});
});
}
}
如果有一种更好的方法可以做到这一点,而我并不总是愿意学习。你的定位对象到底是什么样子的?这有点老套,但关联数组/字典可能会对您有所帮助 假设您在Chrome的开发控制台中创建了一些location对象,以便查看每个语句返回的内容 首先创建一个位置对象:
place1 = {}
>Object {}
place1.name = "SomePlace"
>"SomePlace"
place1.address = "123 Sesame St."
>"123 Sesame St."
然后,为了更好地衡量,创建另一个:
place2 = {}
>Object {}
place2.name = "AnotherPlace"
>"AnotherPlace"
place2.address = "456 Main St."
>"456 Main St."
现在,让您的locy阵列容纳以下位置:
locy = []
>[]
locy.push(place1)
>1
locy
>[Object]
locy.push(place2)
>2
locy[1]
>Object {name: "AnotherPlace", address: "456 Main St."}
现在,您可以动态地附加到这些对象:
locy[1].lat = 35
>35
locy[1]
>Object {name: "AnotherPlace", address: "456 Main St.", lat: 35}
因此,在您的情况下,只需使用这样的对象填充locy,并将其传递到getLoc函数中。然后,您仍然可以使用for循环对其进行迭代,并将lat/lon数据与locy[i]或address变量相关联。我在问题中添加了数组的外观。这是有道理的,我可能已经考虑过了……但是有没有办法让函数返回值,然后将其添加到事件数组中?或者我应该让第二个函数将其添加到数组中。