1

私はこのような文字列を分割しようとしています:

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」に含まれることを目的としていますが、2次元配列ではなく1次元配列を取得している点が異なります。

次のプロセスは、(たとえば)「lname」を検索してそのインデックスを返すことを目的としているため、「3」が返された場合は、myarray[3][1]を使用して実際の名前にアクセスできます。

これは理にかなっていますか、それとも私は物事を複雑にしすぎていますか?

4

2 に答える 2

1
for (var i = 0; i < fArray.length; i++) {
    nv = fArray[i].split('=');
    myarray.push([nv[0],nv[1]]);
}

nv.length = 0;ループnvの各反復で設定しているため、必須ではありません。for

また、-loopで使用var iします。それ以外の場合は、干渉を要求するグローバル変数を使用/割り当てます。fori

于 2012-12-04T14:58:33.773 に答える
1

あなたの行は、期待どおりに2つの要素を持つ単一のセルではなくmyarray.push(nv[0],nv[1]);、配列に2つの要素をプッシュします(参照: array.push )。必要なのは(括弧に注意してください)、または(ref: array.slice ) です。myarraymyarray.push( [nv[0],nv[1]] )myarray.push(nv.slice(0, 2))

コードを簡素化するために、次の使用をお勧めし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または特注の検索アルゴリズムを使用できます。

于 2012-12-04T14:54:40.793 に答える