2016-05-24 23 views
0

這裏jsBin 在這裏,代碼,如果你不想點擊鏈接分裂地址streetNumber,streetName和streetType

var parseString = function (s) { 
    var streetNumber = s.split(' ')[0]; 
    var streetName = s.split(' ')[1]; 
    var streetType = s.split(' ')[2]; 

    return { 
    streetNumber: streetNumber, 
    streetName: streetName, 
    streetType: streetType, 
    }; 
}; 
var address = "1498 Riedel Street"; 

console.log("Street Number: " + parseString(address).streetNumber); 
console.log("Street Name: " + parseString(address).streetName); 
console.log("Street Type: " + parseString(address).streetType); 

address = "4860 Dry Pine Bay Rd" 

console.log("Street Number: " + parseString(address).streetNumber); 
console.log("Street Name: " + parseString(address).streetName); 
console.log("Street Type: " + parseString(address).streetType); 

現在我想在數量,名稱和類型分裂地址。

StreetType遵循特定的ISO格式,並始終作爲字符串中的最後一個找到。

問題是當街道名稱有多個空格時。 我怎麼能有多個字符從街道類型

+1

即使你的數據是準確的,你可能會發現情況,事情只是不工作。例如,在美國佛羅里達州的坦帕,有一條稱爲「大道」的道路。有一個北部和南部的部分,但它不是「北大道」。它是「N大道」或「S大道」。它沒有「類型」。 – TecBrat

+0

同意,除非你處理「消毒」的數據,這是一個複雜的任務。如果用戶輸入方向,如「123 Main St SE」,該怎麼辦?像smartystreets.com這樣的服務可以解決這個問題。 – mdickin

回答

0

分裂StreetName您可以嘗試

var address = "4860 Dry Pine Bay Rd"; 
var split = address.split(" "); 
var number = split[0]; 
var name = split[1]; 
for (var i = 2; i < split.length - 1; i++) 
    name += " " + split[i]; 
var type = split[split.length - 1]; 

這假定街道類型不包含空格。

或者,您可以使用slice(),然後使用join()

var name = split.slice(1, split.length - 1).join(" "); 

這利用split一個子陣列(不包括在第一和最後一個元素),並加入上的空間中的子陣列。

0

使用Array.shift()Array.pop()來抓住第一個和最後一個元素,然後將剩餘的元素粘在一起。

var parseAddress = function(addr){ 
    var r = { 
     num: null, 
     street: null, 
     type: null 
    }; 
    var addressComponents = addr.split(/\s/g); 
    r.num = Number.parseInt(addressComponents.shift()); 
    r.type = addressComponents.pop(); 
    r.street = addressComponents.join(' '); 
    return r; 
}; 

jsbin:http://jsbin.com/zerega/edit?js,console