1

私は「多次元連想」JavaScript配列を持っています(実際には、JSがネイティブ連想配列を持つことができないため、プロパティを持つオブジェクトです):

var multiArray={ AAA:"one", BBB:"two", CCC:{ 0:"xxx", 1:"yyy", 2:"zzz"} };

そして、この配列からそのような文字列を取得する必要があります:

「AAA=1 & BBB=2 & CCC=xxx,yyy,zzz」

それ、どうやったら出来るの?

次のような 2 つの単純なループを使用する場合:

for(var key in multiArray)
{
        for(var subkey in multiArray[key])
        {
            string = string + multiArray[key][subkey]+",";
        }
}

私はこのようなものを得る:

「AAA = o、n、e & BBB = t、w、o & CCC = xxx、yyy、zzz」

これは私が必要とするものではありません。

Javascriptのみを使用したソリューションはありますか?

4

2 に答える 2

3

わかりました、ここでフィドルを作成しました: http://jsfiddle.net/bJ6HH/。ネストの深さに関係なく機能します。

于 2012-05-19T15:22:52.250 に答える
1

私は次のような関数を使用します

var multiArray={ AAA:"one", BBB:"two", CCC:{ 0:"xxx", 1:"yyy", 2:"zzz"} };

function objToStr(o,delim) {
    if (/^(string|boolean|number)$/.test(typeof o)) return o;
    delim = delim || '&'; // delimiter
    var arr = [], isArray = true;
    for (var j in o) {
        if (isNaN(parseInt(j))) { isArray = false; break; }
    }
    if (isArray) {
        for (var j in o) arr[j] = objToStr(o[j],delim);
        return arr.join(',');
    }
    for (var j in o) {
        if (typeof o[j] != 'object') arr.push(j+'='+o[j]);
        else arr.push(j+'='+objToStr(o[j],delim));
    }
    return arr.join(delim);
}
console.log(objToStr(multiArray,'&'))

編集:これが GET クエリになる場合は、ここで必要な文字をエスケープする必要があります。また、次の配列の結果として何を期待しているのかわからないため、ニーズに合った最適なコードを書くことができませんでした。

var multiArray={ AAA:"one", BBB:"two", CCC:{ 0:"xxx", 1:"yyy", 2:{a:1, b:2}} };
于 2012-05-19T15:40:09.747 に答える