1

我有「多維關聯」 JavaScript數組(這實際上是與性能對象JS不能有本地關聯數組):如何循環通過多維關聯JavaScript數組?

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

,我需要從這個數組得到這樣的字符串:

'AAA =一個& BBB =兩個& CCC = xxx,yyy,zzz'

我該怎麼做?

如果我用兩個簡單的循環是這樣的:

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

我得到的是這樣的:

「AAA = O,N,E & BBB = T,W,鄰& CCC = XXX ,yyy,zzz'

這不是我所需要的。

任何使用Javascript的解決方案只有

+0

爲什麼'multiArray ['CCC']'不是數組? – kojiro

+0

*由於JS不能擁有原生關聯數組*有趣。你能詳細說明一下嗎? – KooiInc

+0

@KooiInc Javascript已索引數組和對象。這可能就是Andrew的意思。 – inhan

回答

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}} }; 
+0

儘管帕特的答案有正確的關鍵點,但他的結果字符串並不完全正確。你的函數返回我真正想要的。謝謝。 – Andrew

+0

不客氣。雖然它不是最終的,因爲我在下面的編輯部分提到了2點。 – inhan

3

好的,我在這裏創建了一個小提琴:http://jsfiddle.net/bJ6HH/。 它適用於任何嵌套深度。

+0

是的,這個答案有效。這裏的關鍵是檢查屬性是否是對象:'if(typeof o [k] =='object')'; – Andrew

+0

那麼爲什麼有人對此表示讚賞?我知道inhan的答案更涉及和詳細,但對於這種簡單的情況,我發現我的方法更簡單... –

+0

我不知道... – Andrew