我正在尝试使用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
答案 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();