Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将对象传递给函数并将结果返回给原始函数_Javascript - Fatal编程技术网

Javascript 如何将对象传递给函数并将结果返回给原始函数

Javascript 如何将对象传递给函数并将结果返回给原始函数,javascript,Javascript,所以我正在解析一个有地址对象的csv文件。然后我想把这个地址发送给我的另一个功能,它会转到一个网站,并获取地址的lat/lng。然后,我希望该函数返回lat/lng,并将其添加为数组中location对象的子对象 到目前为止,我看到的是正在解析CSV并提取address对象。我有发送地址和获取lat/lng的功能……但我不知道如何将它们优雅地连接在一起。我想我可以只做一个巨大的功能,但我想让它更干净 我的事件数组如下所示: reportType: 'OFFENSE 2.0',

所以我正在解析一个有地址对象的csv文件。然后我想把这个地址发送给我的另一个功能,它会转到一个网站,并获取地址的lat/lng。然后,我希望该函数返回lat/lng,并将其添加为数组中location对象的子对象

到目前为止,我看到的是正在解析CSV并提取address对象。我有发送地址和获取lat/lng的功能……但我不知道如何将它们优雅地连接在一起。我想我可以只做一个巨大的功能,但我想让它更干净

我的事件数组如下所示:

 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变量相关联。

我在问题中添加了数组的外观。这是有道理的,我可能已经考虑过了……但是有没有办法让函数返回值,然后将其添加到事件数组中?或者我应该让第二个函数将其添加到数组中。