我正在尝试像这样分解一个字符串:
fname=bill&mname=&lname=jones&addr1=This%20House&...
我想以这样的索引数组结尾
myarray[0][0] = fname
myarray[0][1] = bill
myarray[1][0] = mname
myarray[1][1] =
myarray[2][0] = lname
myarray[2][1] = jones
myarray[3][0] = addr
myarray[3][1] = This House
该 url 比示例长很多。这是我试过的:
var
fArray = [],
nv = [],
myarray = [];
fArray = fields.split('&');
// split it into fArray[i]['name']="value"
for (i=0; i < fArray.length; i++) {
nv = fArray[i].split('=');
myarray.push(nv[0],nv[1]);
nv.length = 0;
}
最终产品应该放在“myarray”中,而且确实如此,除了我得到的是一维数组而不是二维数组。
下一个过程旨在搜索(例如)“lname”并返回它的索引,这样如果它返回“3”,我就可以使用 myarray[3][1] 访问实际的姓氏。
这是否有意义,还是我把事情复杂化了?
最佳答案
你的行 myarray.push(nv[0],nv[1]);
将两个元素推送到数组 myarray
,而不是一个包含两个元素的单元格你期望(引用:array.push)。你想要的是 myarray.push( [nv[0],nv[1]] )
(注意括号),或者 myarray.push(nv.slice(0, 2))
(引用:array.slice)。
为了简化您的代码,我可以建议使用 Array.map
:
var q = "foo=bar&baz=quux&lorem=ipsum";
// PS. If you're parsing from a-tag nodes, they have a property
// node.search which contains the query string, but note that
// it has a leading ? so you want node.search.substr(1)
var vars = q.split("&").map(function (kv) {
return kv.split("=", 2);
});
对于搜索,我建议使用 array.filter :
var srchkey = "foo";
var matches = vars.filter(function (v) { return v[0] === srchkey; });
注意。 array.filter 将始终返回一个数组。如果你总是想要一个值,你可以使用 array.some或定制的搜索算法。
关于javascript - 如何使用 JavaScript 将带有参数的 URL 字符串拆分为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13705562/