惯用JavaScript中的嵌套for循环

惯用JavaScript中的嵌套for循环,javascript,python,for-loop,list-comprehension,Javascript,Python,For Loop,List Comprehension,我正在将一些代码从Python翻译成JavaScript,我需要重写以下用于循环列表理解的嵌套代码,其中解决方案是字符串键和列表值的字典 events=[e代表解决方案中的key.key代表解决方案中的c[key]代表解决方案中的e.events] 不用花太多心思,我就把它翻译成这种笨拙、丑陋的嵌套for循环 常量事件=[] 对于solution.keys的const key{ 用于解决方案的常数c[键]{ 对于c事件的常数{ 普什事件 } } } 但也许有更好的方法。如何用简短、惯用、现代的E

我正在将一些代码从Python翻译成JavaScript,我需要重写以下用于循环列表理解的嵌套代码,其中解决方案是字符串键和列表值的字典

events=[e代表解决方案中的key.key代表解决方案中的c[key]代表解决方案中的e.events] 不用花太多心思,我就把它翻译成这种笨拙、丑陋的嵌套for循环

常量事件=[] 对于solution.keys的const key{ 用于解决方案的常数c[键]{ 对于c事件的常数{ 普什事件 } } }
但也许有更好的方法。如何用简短、惯用、现代的ES2015+JavaScript重写上述嵌套for循环?

没有更好的方法。原始Python应使用以下值:

events=[e代表解决方案中的foo.values代表c中的foo,e代表c.events] 您可以在JavaScript中反映这一点:

常量事件=[]; 对于solution.values的const foo{ 对于foo的常数c{ 对于c事件的常数{ events.push; } } } 这是非常简短和易于阅读的,或者当foo被替换为合适的名称时就会出现。如果您喜欢创建大量中间列表,可以使用concat:

常量事件=[]; 对于solution.values的const foo{ 对于foo的常数c{ 事件=events.concatc.events; } } 如果您喜欢不真正节省空间或可读性的函数调用,请减少,假设解决方案的值是数组:

常量事件=[]; 对于solution.values的const foo{ events=foo.reduce m、 n=>m.concatn.events, 事件 ; } 和Array.from和reduce如果您确实喜欢中间列表但不喜欢可读性:

常数事件= Array.fromsolution.values.reduce 事件,foo=>events.concat 食物减少 m、 n=>m.concatn.events, 事件 , [] ; 定义更多的函数会减轻痛苦,但不会改变ES6不是那么好的事实

const concat=数组=> arrays.reducem,n=>m.concatn,[]; const concatMap=fn,数组=> concatarray.mapfn; const events=concatMap foo=>concatMapfoo,c=>c.events, Array.fromsolution.values ; 可能标准库缺少一些迭代器函数

函数*mapfn,iterable{ 对于iterable的常数x{ 产量fnx; } } 函数*concatiterables{ 对于不可数的常数{ 收益率*可预测; } } const concatMap=fn,iterables=> concatmapfn,iterables; const events=Array.from 海图 [key,foo]=>concatMapc=>c.events,foo, 解决方案 ;
老实说,请坚持使用for循环。

非常彻底、启发性的答案。非常感谢。