我有以下两个变量作为前提:
const snippets = [
{ start: 48.12, end: 50.8, id: 12, snippetTitle: "This is the title" },
{ start: 48.29, end: 49.1, id: 13, snippetTitle: "This is the title" }
];
let words = [{"word":" yeah","start_time":"46.44","end_time":"46.82","__typename":"SimplifiedWord"},{"word":".","start_time":"46.44","end_time":"46.82","__typename":"SimplifiedWord"},{"word":" So","start_time":"47.55","end_time":"47.81","__typename":"SimplifiedWord"},{"word":" now","start_time":"47.82","end_time":"48.12","__typename":"SimplifiedWord"},{"word":" it","start_time":"48.12","end_time":"48.28","__typename":"SimplifiedWord"},{"word":" works","start_time":"48.29","end_time":"48.74","__typename":"SimplifiedWord"},{"word":" for","start_time":"48.75","end_time":"49.1","__typename":"SimplifiedWord"},{"word":" for","start_time":"49.11","end_time":"49.67","__typename":"SimplifiedWord"},{"word":" to","start_time":"49.68","end_time":"50.23","__typename":"SimplifiedWord"},{"word":" let","start_time":"50.33","end_time":"50.62","__typename":"SimplifiedWord"},{"word":" me","start_time":"50.62","end_time":"50.8","__typename":"SimplifiedWord"},{"word":" refresh","start_time":"50.8","end_time":"51.41","__typename":"SimplifiedWord"},{"word":" the","start_time":"51.42","end_time":"51.72","__typename":"SimplifiedWord"},{"word":" computer","start_time":"51.73","end_time":"52.55","__typename":"SimplifiedWord"},{"word":".","start_time":"51.73","end_time":"52.55","__typename":"SimplifiedWord"}];
我试图找到我可以通过这些数据制作的所有系列组合。基本上我想显示用户在哪里制作了一些片段start
,end
但是这些片段可以重叠。我的意思是在片段变量中获取样本:在 48.12 start_time 的单词开始之前,我想开始将 48.12 和 50.8 之间的那些添加到数组中。但在此区间内,可能会出现另一个片段,例如在 48.29 和 49.1 之间,这将是片段中的片段。如何使其动态和递归地将所有这些元素包装在父元素内的数组中,但仍有可能重叠。
我试过这样的事情:
let x = words.reduce((accumulator, currentValue, idx) => {
let isin = isInSnippets(currentValue);
if (!isin) {
if (cache.length > 0) {
accumulator.push(
<Snippet className="wrapit" key={idx}>
<TextContent
words={cache}
skip
identity={identity}
></TextContent>
</Snippet>
);
cache = [];
}
accumulator.push(
<span
key={`${currentValue.word}${idx}`}
data-start={currentValue.start_time}
data-end={currentValue.end_time}
data-idnt={identity}
>
{currentValue.word}
</span>
);
} else cache.push(currentValue);
return accumulator;
}, []);
但这种方法似乎不能处理嵌套情况。它适用于单个片段,或者如果一个小片段包含在一个较大的片段中,那么只有大片段包含在 Snippet 组件中。
基本上我希望最终结果是这样的:
<span data-start="46.44" data-end="46.82"> yeah</span>
<span data-start="46.44" data-end="46.82">.</span>
<span data-start="47.55" data-end="47.81"> So</span>
<span data-start="47.82" data-end="48.12"> now</span>
<Snippet>
<span data-start="48.12" data-end="48.28"> it</span>
<Snippet>
<span data-start="48.29" data-end="48.74"> works</span>
<span data-start="48.75" data-end="49.1"> for</span>
</Snippet>
<span data-start="49.11" data-end="49.67"> for</span>
<span data-start="49.68" data-end="50.23"> to</span>
<span data-start="50.33" data-end="50.62"> let</span>
<span data-start="50.62" data-end="50.8"> me</span>
</Snippet>
<span data-start="50.8" data-end="51.41"> refresh</span>
<span data-start="51.42" data-end="51.72"> the</span>
<span data-start="51.73" data-end="52.55"> computer</span>
<span data-start="51.73" data-end="52.55">.</span>
</div>
请注意最终结果中 Snippet 中的 Snippet。