【发布时间】:2014-11-02 19:59:08
【问题描述】:
我试图得到一个看起来像这样的结果:Miniors | Boys | 54kg - 62kg 其中每个值都由管道分隔 |来自包含某种“限制类型”的数组。例如:ageGroups, genders, weightClasses(如上所示)。
我现在能够得到这个结果的方法是,如果我硬编码嵌套的 forEach 循环(使用 underscorejs),但这意味着我现在必须循环多少个数组才能得到想要的结果。 这工作“很好”:
var categories = [];
_.each(ageGroups, function(ageGroup) {
_.each(gender, function(gender) {
_.each(weightClasses, function(weightClass) {
categories.push(ageGroup.name + ' | ' + gender.name + ' | ' + weightClass.name);
});
});
});
输出是一个数组(类别),其中包含限制数组的所有可能组合。
现在,我的问题是我需要一种方法来处理未知数量的限制数组。 我对正确解决方案的猜测是 recursion,BUT 我无法产生任何真正有效的东西,因为我还不能把头绕在递归上:)
可以在此处找到使用一些测试数据准备的小提琴:jsFiddle。 fiddle 使用 angular 进行一些简单的数据绑定和调试结果输出,使用 underscorejs 处理数组。
【问题讨论】:
-
尽量不要使用副作用(即
pushing 到全局categories数组),而是在每个步骤中使用return并使用map(和flatten) -
嗯.. 好吧。 Flatten 在这里没有任何用处,因为我需要来自不同数组的不同值的组合。但是 map 可能是一些东西..即使我看不到它如何解决我面临的动态数组数量的问题。您愿意详细说明吗?
-
尝试使用
map(即使以非通用方式),您将看到flatten的用途。然后,创建一个函数,获取groups、当前组的索引(“嵌套级别”)和访问组的当前名称。基本情况(当嵌套级别达到groups的长度时)将返回那些当前名称(由 ` | ` 连接),即递归情况 - 你会发现。
标签: javascript arrays recursion underscore.js nested-loops