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 = о, п, е & ВВВ = т, ш, о & CCC = ххх , yyy, zzz '

Это не то, что мне нужно.

Любые решения, использующие только Javascript ?

+0

Почему 'multiArray ['CCC']' не массив? – kojiro

+0

* как JS не может иметь собственный ассоциативный массив * Интересно. Не могли бы вы уточнить? – KooiInc

+0

@KooiInc Javascript имеет индексированные массивы и объекты. Вероятно, это то, что означает Эндрю. – 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,'&')) 

EDIT: Вам нужно будет бежать необходимые символы здесь, если это будет GET запрос. Кроме того, я не уверен, чего вы ожидаете в результате следующего массива, поэтому я не мог написать лучший код, который будет соответствовать вашим потребностям.

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

Хотя ответ Парта имеет правильную ключевую точку, его результирующая строка не совсем правильная. Ваша функция возвращает то, что я точно хотел. Спасибо. – Andrew

+0

Добро пожаловать. Хотя это не последнее из-за тех двух пунктов, о которых я упоминал в нижнем разделе редактирования. – inhan

3

Хорошо, я создал скрипку здесь: http://jsfiddle.net/bJ6HH/. Он работает для любой глубины вложенности.

+0

Да, этот ответ работает. Ключ здесь - проверить, является ли свойство объектом: if (typeof o [k] == 'object') '; – Andrew

+0

, то почему кто-то сделал это? Я знаю, что ответ пользователя более сложный и подробный, но для этого простого сценария я нашел свой метод проще ... –

+0

Не знаю ... – Andrew