2015-09-18 3 views
2

Пожалуйста, проверьте мою скрипку и скажите мне, что я сделал не так? Я не хочу option0. почему это происходит. Пожалуйста, помогите мне.Многомерный массив javascript для JSON

var qus ={ 
    { 

    "qus" :"what is your name?", 
    "option0" : {"ans" : "w", "cor":"h"}, 
    "option1" : {"ans" : "Alex", "cor":"false"}, 
    "option2" : {"ans" : "Hervy", "cor":"false"}, 
    "option3" : {"ans" : "Rico", "cor":"true"}, 
    "option4" : {"ans" : "Tom", "cor":"false"}, 
    }, 

} 

Вот мой jsfiddle ссылка http://jsfiddle.net/rushdi1987/jvhgxawm/4/

+1

side-issue, но вместо того, чтобы вручную выводить JSON, вы должны преобразовать массив в объект, который вы хотите, а затем просто 'JSON.stringify (obj)'. Гораздо меньше подвержено ошибкам. – Lee

ответ

2

Небольшое изменение:

for (n in objects[i]) { 

     if(typeof objects[i][n] !='string') { 


     document.getElementById("out").innerHTML += '"option' + n + '" : {"ans" : ' + objects[i][n][0] + ', "cor:"' + objects[i][n][1] + '"},<br>'; 
     } 
    }; 

Если вы console.log (объекты [я] [п]), вы заметите, что у вас есть вопрос string как элемент в цикле. Итак, таким образом, вы можете пропустить его ... (или какой-то другой способ, как это было предложено в ответах)

Демо: http://jsfiddle.net/jvhgxawm/7/

Однако повторно структурирования исходный массив (если можно) - было бы лучше вариант.

0

Имеет смысл хранить различные параметры в виде массива. Так Intead из:

["what is your name?", ["Alex", false], 
    ["Hervy", false], 
    ["Rico", true], 
    ["Tom", false] 
], 

вы должны сделать это:

["what is your name?", [ 
    ["Alex", false], 
    ["Hervy", false], 
    ["Rico", true], 
    ["Tom", false] 
]], 

затем, во внутреннем цикле, замените objects[i] с objects[i][1]:

for (n in objects[i][1]) { 
    document.getElementById("out").innerHTML += '"option' + n + '" : {"ans" : ' + objects[i][1][n][0] + ', "cor:"' + objects[i][1][n][1] + '"},<br>'; 
}; 

Здесь у вас есть fiddle updated.

Надеюсь, это поможет!

2

jsFiddle Demo

Option0 находится там, потому что она является частью массива. Индекс 0 вашего массива - "what is your name?", в первом фрагменте и "what is your brother's name?" во втором.

Использование for in предназначено для итерации каждого индекса, и вывод индекса 0 заканчивается тем, что принимает эту строку в качестве одного из возможных ответов. Поскольку вы предполагаете, что [0] ответа - это имя, а [1] - как флаг, результат [0] и [1]: «как вас зовут?». это w и h. Индекс массива равен 0 в этой точке, поэтому вы получите "option0" : {"ans" : w, "cor:"h"},, которого вы не хотите.

Исправление проста, просто пропустить этот показатель в вашей для в цикле, используя условный если и продолжить

if(n == 0)continue; 

Я слегка переработан код, чтобы сделать его немного легче читать, а

var objects = [ 
    [ 
     "what is your name?", 
     ["Alex", false], 
     ["Hervy", false], 
     ["Rico", true], 
     ["Tom", false] 
    ], 
    [ 
     "what is your brother's name?", 
     ["Alex", false], 
     ["Hervy", true], 
     ["Rico", false], 
     ["Tom", false] 
    ] 
]; 

var el = document.getElementById("out"); 

el.innerHTML += 'var qus ={ <br>'; 

for (i in objects){ 
    var qset = objects[i]; 

    el.innerHTML += '{ <br>'; 
    el.innerHTML += '"qus" :"' + qset[0] + '",<br>'; 

    for (n in qset){ 
     if(n == 0)continue; 
     var nameset = qset[n]; 

     el.innerHTML += '"option' + n; 
     el.innerHTML += '" : {"ans" : ' + nameset[0]; 
     el.innerHTML += ', "cor:"' + nameset[1] + '"},<br>'; 
    } 

    el.innerHTML += '},<br><br>'; 
} 
el.innerHTML += '}'; 
+0

Большое спасибо за вашу помощь. Не могли бы вы объяснить еще одно? Как это, если условие исправить проблему. что означает это условие? – rushdi

+1

@rushdi - Конечно.В основном, что это условие делает, пропускает 0-й элемент в массиве. Который является первым элементом (индексирование на основе 0). Этот элемент - это ваша строка «как зовут вашего брата». Поэтому, посмотрев, есть ли 'n == 0', мы смотрим, действительно ли текущий индекс является строкой« что такое имя вашего брата ». Если это так, мы не хотим обрабатывать это как набор имен и логических значений, которые мы просто хотим пропустить. Ключевое слово 'continue' позволяет нам перейти к следующей итерации цикла. –

+0

Спасибо человек. U - гений. – rushdi

Смежные вопросы