1

我有“多维关联”javascript数组(实际上是具有属性的对象,因为JS不能有本机关联数组):

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,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 回答