Вложенные циклы: последний цикл всегда возвращает последний объект массива - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь сделать цикл с 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

Ответы [ 3 ]

1 голос
/ 05 апреля 2019

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

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, потому что длина этих массивовто же самое, но если они не всегда будут одинаковыми по длине, то вы должны также зациклить последний массив

0 голосов
/ 05 апреля 2019

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

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();
0 голосов
/ 05 апреля 2019

Здесь:

      for (q = 0; q < queries.length; q++) {
        query = queries[q]
      }

      console.log(featureAction, query)

"Перебрать весь массив запросов, когда вы закончите, распечатайте последний". Поместите console.log в петлю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...