#javascript #loops
#javascript #циклы
Вопрос:
Я пытаюсь создать цикл с 3 массивами. Все в порядке до последнего цикла.
Этот последний цикл всегда возвращает последний объект массива.
Я пытался добавить некоторые перерывы, переместить циклы на тот же уровень и многое другое. Но я никогда не добивался успеха…
Вот мой код
features = [
'poll',
'form'
];
actions = [
'create',
'activate',
'duplicate'
];
queries = [
'createQuery',
'activateQuery',
'duplicateQuery'
];
function getFeatureAction(feature) {
for (f = 0; f < features.length; f ) {
feature = features[f];
queries = [
'createQuery',
'activateQuery',
'duplicateQuery'
];
for (a = 0; a < actions.length; a ) {
action = actions[a]
featureAction = feature '_' action
for (q = 0; q < queries.length; q ) {
query = queries[q]
}
console.log(featureAction, query)
}
}
}
getFeatureAction();
Мой исключенный результат :
poll_create createQuery
poll_activate activateQuery
poll_duplicate duplicateQuery
form_create createQuery
form_activate activateQuery
form_duplicate duplicateQuery
Комментарии:
1. Вы пробовали добавлять
console.log
внутри 3-гоfor loop
?
Ответ №1:
итак, я думаю, что общая мысль здесь заключается в том, что вам нужно войти внутрь цикла, чтобы вы могли видеть каждую его итерацию вместо того, чтобы просто видеть последний результат, который будет напечатан по завершении цикла, поскольку вы находитесь за его пределами. Есть множество способов, которыми вы можете это сделать, но оставаться как можно ближе к вашей версии было бы примерно так.
features = [
'poll',
'form'
];
actions = [
'create',
'activate',
'duplicate'
];
queries = [
'createQuery',
'activateQuery',
'duplicateQuery'
];
function getFeatureAction(feature) {
for (let f = 0; f < features.length; f ) {
feature = features[f];
for(let a = 0; a < actions.length; a ) {
query = queries[a]
action = actions[a]
featureAction = feature '_' action
console.log(featureAction, query)
}
}
}
getFeatureAction();
обратите внимание, что я выполнил только два for
цикла, потому что длина этих массивов одинакова, но если они не всегда будут одинаковой длины, тогда вам следует выполнить цикл и для последнего массива
Ответ №2:
Здесь:
for (q = 0; q < queries.length; q ) {
query = queries[q]
}
console.log(featureAction, query)
«Выполните цикл по всему массиву запросов, когда закончите, распечатайте последний». Поместите console.log
внутрь цикла.
Ответ №3:
Вы регистрируете значение после завершения цикла, поэтому, очевидно, вы всегда получаете последнее значение. Запишите его изнутри цикла. Также вы можете написать свой код гораздо более сжатым способом, например, так :
const features = [
'poll',
'form'
];
const actions = [
'create',
'activate',
'duplicate'
];
const queries = [
'createQuery',
'activateQuery',
'duplicateQuery'
];
function getFeatureAction() {
for (feature of features) {
for (action of actions) {
let featureAction = feature '_' action
for (query of queries) {
console.log(featureAction, query); // <-- Log INSIDE the loop, not after
}
}
}
}
getFeatureAction();
Комментарии:
1. Спасибо! К сожалению, этот метод повторяется слишком много раз (я уже пробовал его).