javascript - 如何使用 JavaScript 将带有参数的 URL 字符串拆分为数组

标签 javascript arrays multidimensional-array

我正在尝试像这样分解一个字符串:

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/

相关文章:

javascript - 将操作应用于由 Promise 解析的数组中的每个结果,无需嵌套

php - 将数据库中的数据添加到数组中

从 stdin 计算简单赋值运算符 "="

c++ - 排序通过引用传递的二维 vector

javascript - 如何从 Rails Controller 中的 XMLHttpRequest 中提取数据

javascript - 从容器 div 中的 childNode 获取值

c# - 遍历 0's and 1' 的 int[,] 数组

javascript - 如何在 JavaScript 中将邻接矩阵转换为邻接列表?

javascript - 如何使用javascript获取倒数第二个元素

php - 如何从不完整的关联数组中获取键/值?