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