2015-01-09 42 views
0

输入:拆分网址标签在JavaScript

"/desh/HRTY/THR/TDR/2015-01-09?passengers=STANDARD:1&returnDate=2015-01-10&max=0&withThac=false" 

的javascript:

var params = {}; 
var paramDelim = link.indexOf('?'); 
var parmeters = link.substring(paramDelim + 1, link.length); 
var parts = parmeters.split('[&=]'); 

我的js代码输出:

0: "passengers=STANDARD:1&returnDate=2015-01-10&max=0&withThac=false" 
length: 1 

我想我的网址分成与关键的地图:值这样

输出:

origin:THR 
destination:TDR 
goDate:2015-01-09 
passengers:STANDARD:1 
returnDate:2015-01-10 
max:0 
withThac:false 

我的代码没有做什么我想在输出什么是错的 ?

+0

的是没有“[&=]”在分割发现所以这是预期的行为 – Hacketo

+1

您正在使用包含4个字符'[&=]字符串'作为分隔符分开。由于输入不包含'[&=]',因此只会得到一个大字符串。试着把它放在一个正则表达式中,比如'... split(/ [&=] /)'。这个http://stackoverflow.com/a/3560051/1389366是一个很好的解释你的问题。 – icke

回答

2

你应该

var params = parmeters.split('&') 

拆再拆所有的值,你得到

for (var i = 0,len = params.length; i<len;i++){ 
    var data = params[i].split("=", 2); // Max 2 elements 

    var key = data[0]; 
    var value = data[1]; 
    ... 
} 
1

我认为你错了'字符

var params = {}; 
var paramDelim = link.indexOf('?'); 
var parmeters = link.substring(paramDelim + 1, link.length); 
/*--> i think used regexp. Clear ' Char. --> */var parts = parmeters.split(/[&=]/); 

使用这个喜欢..

好lu ck

1

使用ECMA5方法并假定您的字符串总是相同模式的可能解决方案。

var src = '/desh/HRTY/THR/TDR/2015-01-09?passengers=STANDARD:1&returnDate=2015-01-10&max=0&withThac=false', 
 
    slice = src.split(/[\/|?|&]/).slice(3), 
 
    data = slice.reduce(function (output, item) { 
 
     var split = item.split('='); 
 

 
     output[split.shift()] = split.shift(); 
 

 
     return output; 
 
    }, { 
 
     origin: slice.shift(), 
 
     destination: slice.shift(), 
 
     goDate: slice.shift() 
 
    }); 
 

 
document.body.appendChild(document.createTextNode(JSON.stringify(data)));