Javascript 如何将一个句子解构成所有可能的子句子

Javascript 如何将一个句子解构成所有可能的子句子,javascript,algorithm,Javascript,Algorithm,我有一段代码,如果没有找到完整的句子,可以在维基百科上查找子句子。 我对数组切片的理解是,负n参数将从数组的末尾开始,而不是从数组的乞讨开始。所以我想我可以在上面做一些曲折的迭代。但我错了。有人能给我指出正确的方向吗 所以我这样做了: function splitwords (words, i=0) { const parts = words.split(` `); const wordcount = parts.length; let index = i%((wordcount-

我有一段代码,如果没有找到完整的句子,可以在维基百科上查找子句子。 我对数组切片的理解是,负n参数将从数组的末尾开始,而不是从数组的乞讨开始。所以我想我可以在上面做一些曲折的迭代。但我错了。有人能给我指出正确的方向吗

所以我这样做了:

function splitwords (words, i=0) {
  const parts = words.split(` `);
  const wordcount = parts.length;

  let index = i%((wordcount-1)*2)-(wordcount-1); //zigzag
  let par = parts.slice(index);

  return par;
} 

for (let = 0; i < 10, i++) {
  splitwords('Fresh Prince of Bel Air', i) 
}

PS:关于
.slice()
,我有什么误解?

虽然它不是最漂亮或性能最好的代码,但这一个很好理解:

const str = "Fresh Prince of Bel Air"
const arr = str.split(' ')
const min = 2
const result = new Set()

// Loop twice for end and start point choice
for (var i = arr.length; i >= min; i--) {
  for (var j = 1; j <= i - min; j++) {
    result.add(arr.slice(j, i).join(' '))
  }
}

// Loop to cut at the end
for (var k = arr.length - 1; k >= min; k--) {
  result.add(arr.slice(0, k).join(' '))
}

// Add all separate words
arr.forEach(item => result.add(item))

for (let item of result) console.log(item);
const str=“贝莱尔新鲜王子”
常量arr=str.split(“”)
常数最小值=2
常量结果=新集合()
//循环两次以选择终点和起点
对于(变量i=arr.length;i>=min;i--){
对于(变量j=1;j=min;k--){
结果.add(arr.slice(0,k).join(“”))
}
//添加所有单独的单词
arr.forEach(项=>result.add(项))
for(让结果项)console.log(项);

虽然这不是最漂亮或性能最好的代码,但这一代码很好理解:

const str = "Fresh Prince of Bel Air"
const arr = str.split(' ')
const min = 2
const result = new Set()

// Loop twice for end and start point choice
for (var i = arr.length; i >= min; i--) {
  for (var j = 1; j <= i - min; j++) {
    result.add(arr.slice(j, i).join(' '))
  }
}

// Loop to cut at the end
for (var k = arr.length - 1; k >= min; k--) {
  result.add(arr.slice(0, k).join(' '))
}

// Add all separate words
arr.forEach(item => result.add(item))

for (let item of result) console.log(item);
const str=“贝莱尔新鲜王子”
常量arr=str.split(“”)
常数最小值=2
常量结果=新集合()
//循环两次以选择终点和起点
对于(变量i=arr.length;i>=min;i--){
对于(变量j=1;j=min;k--){
结果.add(arr.slice(0,k).join(“”))
}
//添加所有单独的单词
arr.forEach(项=>result.add(项))
for(让结果项)console.log(项);

那么你想要一个单词列表的所有可能的片段

函数*allSlices(a){
for(设i=0;iconsole.log(…s)
那么您想要单词列表的所有可能片段

函数*allSlices(a){
for(设i=0;iconsole.log(…s)
确保监视
索引的值
切片
按您所说的那样工作(虽然您不使用它的第二个参数),但您需要调试…并检查变量。另外:您所需的输出不包括“所有可能的子语句”.只列出这些的逻辑是什么?@trincot事实上,我只是在示例中错误地删除了它,谢谢你这么做。你有权不拥有所有可能的“贝尔王子”例如,缺少。在我的例子中,它的ok思想是,如果函数返回它,它也会很好,但肯定是在6个第一个输出之后。确保监视
索引
切片
的值按您所说的那样工作(尽管您不使用它的第二个参数),但你需要调试…并检查变量。另外:你想要的输出不包括“所有可能的子句子”。只列出这些子句子的逻辑是什么?@trincot事实上,我是这样做的,我只是在示例中错误地删除了它,谢谢你这么做。你没有所有可能的“贝尔王子”的权利例如缺少。在我的例子中,它的想法是可以的,如果函数返回它,它也会很好,但肯定是在6个第一个输出之后。哇,非常优雅。是的,有点但是:我不需要整个句子,它应该开始删除前面的单词。(英语倾向于先用形容词,所以我想在句子中查找宾语)@meo:看更新这不是我的意思。我需要先查找“贝尔空气王子”,然后再查找“贝尔新鲜王子”。很棒的函数思想。我通过阅读中学到了很多。以前从未使用过生成器函数。@meo:你必须再举一些例子,因为我没有真正掌握这里的逻辑。比如,给定
a B C D E F G H
,其中a,B,C是单词,需要的迭代顺序是什么?你是个野兽!!!
B C D E F G H
C D E F G H
D E F G H
E F G H
E F G H
G H
B C D E F G
B C D E F
B C D E
等,,,,哇,非常优雅。是的,但:我不需要整个句子,它应该开始删掉前面的单词。(英语倾向于先用形容词,所以我想在句子中查找宾语)@meo:看更新这不是我的意思。我需要先查找“贝尔空气王子”,然后再查找“贝尔新鲜王子”。很棒的函数思想。我通过阅读中学到了很多。以前从未使用过生成器函数。@meo:你必须再举一些例子,因为我没有真正掌握这里的逻辑。比如,给定
a B C D E F G H
,其中a,B,C是单词,需要的迭代顺序是什么?你是个野兽!!!
B C D E F G H
C D E F G H
D E F G H
E F G H
F G H
G H
,然后才
B C D E F
B C D E
等,,,