Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 排列所有字符串中的单词_Javascript_Arrays - Fatal编程技术网

Javascript 排列所有字符串中的单词

Javascript 排列所有字符串中的单词,javascript,arrays,Javascript,Arrays,我有一个文本数组,每个元素中可以有多个单词。例如,阵列可能如下所示: let myArray = ['big bad wolf','go home'] big bad wolf bad big wolf wolf bad big wolf big bad big wolf bad bad wolf big go home home go 我想要一个算法,将其转换成字符串或其他数组,在其中生成同一行上所有可能的单词组合。输出如下所示: let myArray = ['big bad wolf'

我有一个文本数组,每个元素中可以有多个单词。例如,阵列可能如下所示:

let myArray = ['big bad wolf','go home']
big bad wolf
bad big wolf
wolf bad big
wolf big bad
big wolf bad
bad wolf big
go home
home go
我想要一个算法,将其转换成字符串或其他数组,在其中生成同一行上所有可能的单词组合。输出如下所示:

let myArray = ['big bad wolf','go home']
big bad wolf
bad big wolf
wolf bad big
wolf big bad
big wolf bad
bad wolf big
go home
home go

采用您在注释中发布的方法,并为数组的每个元素调用它。
注意:我重新命名了它,以便它更适合置换示例,并且还做了一个更改,以便在空白处拆分

const arr=[“大灰狼”,“回家去”];
让我们重新来过;
arr.forEach((x)=>{
res=getPermutations(x);
控制台日志(res);
})
功能交换(字,i,j){
const tmp=单词[i];
字[i]=字[j];
字[j]=tmp;
}
函数getPermutations(输入){
让计数器=[],
排列=[],
单词=输入。拆分(“”),
长度=words.length,
我
对于(i=0;i}
采用您在评论中发布的方法,并为数组的每个元素调用它。
注意:我重新命名了它,以便它更适合置换示例,并且还做了一个更改,以便在空白处拆分

const arr=[“大灰狼”,“回家去”];
让我们重新来过;
arr.forEach((x)=>{
res=getPermutations(x);
控制台日志(res);
})
功能交换(字,i,j){
const tmp=单词[i];
字[i]=字[j];
字[j]=tmp;
}
函数getPermutations(输入){
让计数器=[],
排列=[],
单词=输入。拆分(“”),
长度=words.length,
我
对于(i=0;i}
让我们编写一个
permute
函数,它接受一个字符串数组并返回一个排列数组,例如

permute(['big','bad','wolf']);
//=>[[“大”、“坏”、“狼”]
//=>,[“大”、“狼”、“坏”]
//=>,[“坏”、“大”、“狼”]
//=>,[“坏”、“狼”、“大”]
//=>,[“狼”、“大”、“坏”]
//=>,[“狼”、“坏”、“大”]]
这里有一种方法:

const without=(i,xs)=>xs.filter((u,j)=>j!==i);
常数排列=
xs=>
xs.length==1?[xs[0]]
:xs.length==2?[[xs[0],xs[1]],[xs[1],xs[0]]
:xs.flatMap((xx,i,xxs)=>
排列(无(i,xxs))
.map(ys=>[xx,…ys]);
排列一个由一个或两个元素组成的数组是很简单的(这是您早期的退出条件),否则迭代当前元素并将其与所有其他元素一起排列(这就是为什么不带的
函数很有用的原因)

将“大坏狼”拆分成
[“大”、“坏”、“狼”]
很简单:
str.split(“”)
。 加入
['big'、'bad'、'wolf']
成为
'big bad wolf'
arr.join('')

现在,您需要做的就是:

  • 迭代字符串数组
  • 对于每个字符串,将其拆分为单词
  • 把那些话排列一下
  • 加入每个排列
  • ['big bad wolf','go home']
    .flatMap(str=>
    排列(str.split(“”))
    .map(perm=>perm.join(“”));
    //=>[“大灰狼”
    //=>,“大灰狼坏了”
    //=>,“坏大灰狼”
    //=>,“大灰狼”
    //=>,“狼大坏”
    //=>,“狼坏大”
    //=>,“回家”
    //=>,“回家”]
    
    让我们编写一个
    permute
    函数,它接受一个字符串数组并返回一个排列数组,例如

    permute(['big','bad','wolf']);
    //=>[[“大”、“坏”、“狼”]
    //=>,[“大”、“狼”、“坏”]
    //=>,[“坏”、“大”、“狼”]
    //=>,[“坏”、“狼”、“大”]
    //=>,[“狼”、“大”、“坏”]
    //=>,[“狼”、“坏”、“大”]]
    
    这里有一种方法:

    const without=(i,xs)=>xs.filter((u,j)=>j!==i);
    常数排列=
    xs=>
    xs.length==1?[xs[0]]
    :xs.length==2?[[xs[0],xs[1]],[xs[1],xs[0]]
    :xs.flatMap((xx,i,xxs)=>
    排列(无(i,xxs))
    .map(ys=>[xx,…ys]);
    
    排列一个由一个或两个元素组成的数组是很简单的(这是您早期的退出条件),否则迭代当前元素并将其与所有其他元素一起排列(这就是为什么不带
    函数很有用的原因)

    将“大坏狼”拆分成
    [“大”、“坏”、“狼”]
    很简单:
    str.split(“”)
    。 加入
    ['big'、'bad'、'wolf']
    成为
    'big bad wolf'
    arr.join('')

    现在,您需要做的就是:

  • 迭代字符串数组
  • 对于每个字符串,将其拆分为单词
  • 把那些话排列一下
  • 加入每个排列
  • ['big bad wolf','go home']
    .flatMap(str=>
    排列(str.split(“”))
    .map(perm=>perm.join(“”));
    //=>[“大灰狼”
    //=>,“大灰狼坏了”
    //=>,“坏大灰狼”
    //=>,“大灰狼”
    //=>,“狼大坏”
    //=>,“狼坏大”
    //=>,“回家”
    //=>,“回家”]
    
    您可以查看JavaScript中可用的数组方法,并确定哪种方法适合您的需要。然后试着用它。我不知道逻辑是什么。递归是我想到的一个术语