Javascript 如何将一个句子解构成所有可能的子句子
我有一段代码,如果没有找到完整的句子,可以在维基百科上查找子句子。 我对数组切片的理解是,负n参数将从数组的末尾开始,而不是从数组的乞讨开始。所以我想我可以在上面做一些曲折的迭代。但我错了。有人能给我指出正确的方向吗 所以我这样做了:Javascript 如何将一个句子解构成所有可能的子句子,javascript,algorithm,Javascript,Algorithm,我有一段代码,如果没有找到完整的句子,可以在维基百科上查找子句子。 我对数组切片的理解是,负n参数将从数组的末尾开始,而不是从数组的乞讨开始。所以我想我可以在上面做一些曲折的迭代。但我错了。有人能给我指出正确的方向吗 所以我这样做了: function splitwords (words, i=0) { const parts = words.split(` `); const wordcount = parts.length; let index = i%((wordcount-
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;i console.log(…s)
那么您想要单词列表的所有可能片段
函数*allSlices(a){
for(设i=0;i console.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
等,,,