嵌套循环:last循环始终返回最后一个数组对象

时间:2019-04-05 13:44:42

标签: javascript loops

我正在尝试使用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 个答案:

答案 0 :(得分: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循环,因为这些数组的长度是相同的,但是如果这些数组的长度不总是相同,那么您也应该循环最后一个数组< / p>

答案 1 :(得分:0)

这里:

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

      console.log(featureAction, query)

“遍历整个查询数组,完成后,打印出最后一个”。将console.log放入循环中。

答案 2 :(得分:0)

您要在循环结束后记录该值,因此很明显,您总是会得到最后一个值。从循环内部记录它。同样,您也可以以更简洁的方式编写代码,如下所示:

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();