Javascript 如何将函数应用于值列表?

Javascript 如何将函数应用于值列表?,javascript,arrays,loops,recursion,ramda.js,Javascript,Arrays,Loops,Recursion,Ramda.js,我有一个二维数组(有点),里面充满了单词。每行的列数不同。像这样: var words = [ ["foo", "bar"], ["end", "start", "finish"], ["block"], ["prefer", "pretty", "patty", "flock",

我有一个二维数组(有点),里面充满了单词。每行的列数不同。像这样:

var words = [
  ["foo", "bar"],
  ["end", "start", "finish"],
  ["block"],
  ["prefer", "pretty", "patty", "flock", "freeze"]
]
所以,4行。我们从每行取一个单词,形成一个4个单词的字符串。我需要打印出所有可能的字符串。我该怎么做

预期结果:

foo端块首选
杆端块优先
foo启动块优先
酒吧开始区优先
foo抛光块优先
最好是钢筋饰面砌块
富端块
等

您可以将其视为数字的可视化。正常基数为10时,每个数字都在0-10之间,因此每个位置都有10个数字,但在您的情况下,第一个位置有2个,第二个位置有3个,第三个位置只有一个,第四个位置有5个

因此,不是:

...
[0, 0, 0, 8]
[0, 0, 0, 9]
[0, 0, 1, 0]
[0, 0, 1, 1]
...
你想要:

[0, 0, 0, 0]
[0, 0, 0, 1]
[0, 0, 1, 0]
[0, 0, 1, 1]
[0, 0, 2, 0]
[0, 0, 2, 1]
[1, 0, 0, 0]
[1, 0, 0, 1]
...
所以我把最不重要的符号作为最后一个元素,这样你就可以把它看作一个数字,但是如果我对它进行编程,我可能会在符号数组的索引中保留数字。您知道它溢出的方式是,如果增量达到索引的长度。在第三行,最低的索引将成为
[“foo”,“bar”]
的长度,这意味着它溢出,您需要继续,直到不再有溢出为止

一个你已经设法计数像这样你可以转换任何合法的数字到一个字符串。例如,
[1,2,0,0]
(第6行的反面)是
“bar finish block Preference”
,您可以看到,您只需将该数字用作sybols数组同一索引的索引,符号的实际索引就是该数字。例如,
2
在索引
1
中,它有编号
2
,因此您可以通过
单词[1][2]
获得它

祝你好运


注意:这是一个没有密码的答案。当问题中没有尝试代码时,我通常没有代码答案。如何回答这个问题,请假设您具有以下
语句
功能:

const语句=(a,b,c,d)=>`${a}${b}${c}${d}`;
句子('foo','end','block','preference');
//=>“foo端块首选”
据我所知,数组包含每个参数的所有值

您仍然可以使用上述函数,而无需修改其签名。但是,您确实需要提起它,以便将其应用于值列表。为此,我将使用:

const-station=lift((a,b,c,d)=>`a}${b}${c}${d});
console.log(
句子([“foo”,“bar”]
,[“结束”、“开始”、“完成”]
,[“块”]
,[“更喜欢”、“漂亮”、“帕蒂”、“羊群”、“冻结”]
)
);

常数{lift}=R您可以修改我在另一个问题中给出的,以生成字符串而不是数组,如下所示:

const笛卡尔=([xs,…xss])=>
xs=未定义
? []
:xss.length==0
? xs.map(x=>[x])
:xs.flatMap(x=>cartesian(xss).map(ys=>`${x}${ys}`)
const words=[“foo”、“bar”]、[“end”、“start”、“finish”]、[“block”]、[“preference”、“pretty”、“patty”、“flock”、“freeze”]]
console.log(笛卡尔(单词))

。作为控制台包装{max height:100%!important;top:0}
与使用相同长度数组的方法相同。在前面的词之前切换后面的词会更容易。你可能想搜索“笛卡尔积”。可能对您有用,但您必须将结果数组
连接在一起。@ScottSauyet这看起来很有希望。非常感谢。这是
lift
的一个很好的用法。我甚至没有考虑过这种方法。我想知道对于这种情况,
lift
的最小有用实现是什么。这可能会回答我之前的评论:
const-liftArrs=(fn)=>(xs,…xss)=>xss.length==0?xs.map(fn):xs.flatMap(x=>liftArrs((…args)=>fn(x,…args))(…xss))
。不像拉姆达的版本那样通用,但很有趣。