gpt4 book ai didi

javascript - 嵌套对象的所有组合

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:54:35 25 4
gpt4 key购买 nike

我有以下字符串

Hello, have a {good {night|day}|wonderful {evening|morning}} and {goodbye|bye}!

我正在尝试生成字符串的所有组合。例如:你好,祝你有美好的一天再见!你好,祝你有个美好的夜晚,再见!

规则:{one|two}表示第一次写one,第二次写two。如您所见,这些条件可以嵌套任意次数。

我已经将其解析为以下结构

[
"Hello, have a ",
{
"or": [
[
"good ",
{
"or": [
"night",
"day"
]
}
],
[
"wonderful ",
{
"or": [
"evening",
"morning"
]
}
]
]
},
" and ",
{
"or": [
"goodbye",
"bye"
]
},
"!"
]

现在我不知道如何从这个结构中生成所有字符串。

最佳答案

解析的时候可以直接生成句子,基本上就是遍历所有的可能:

function generateSentences(s) {
const start = s.indexOf('{') + 1
if (start == 0)
return [s]
for (let i = start, braces = 1;; i++)
if (s[i] == '{')
braces++
else if (s[i] == '}')
if (--braces == 0) {
const options = generateOptions(s.substring(start, i)),
posts = generateSentences(s.substr(i + 1)),
pre = s.substring(0, start - 1)
let sentences = []
for (const option of options)
for (const post of posts)
sentences.push(pre + option + post)
return sentences
}
}
function generateOptions(options) {
let braces = 0, start = 0, sentences = []
for (let i = 0; i < options.length; i++)
if (options[i] == '{')
braces++
else if (options[i] == '}')
braces--
else if (options[i] == '|' && braces == 0) {
sentences = sentences.concat(generateSentences(options.substring(start, i)))
start = i + 1
}
return sentences.concat(generateSentences(options.substring(start, options.length)))
}
console.log(generateSentences('Hello, have a {good {night|day}|wonderful {evening|morning}}!'))
console.log(generateSentences('hello, {|111|{!2!|@2@} 222|33 {@333@|444} 3333}! 555. {666|{777 {888|999}}} end...'))

关于javascript - 嵌套对象的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55786056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com