假设我的元素是这样的:
const words = [
'duck foo bar',
'duck',
'duck bing ',
'bing',
'Bloop#12 goose',
'duck 12',
'duck goose',
...
]我想要的是把它分割成块,其中‘鹅’是块中的最后一个元素:
const words = [
[
'duck foo bar',
'duck',
'duck bing',
'bing',
'Bloop#12 goose',
],
[
'duck 12',
'duck goose',
],
[
...
],
];一个‘鹅’前面有多少个元素是没有规律性的,每个元素中也没有其他元素,除了1)鹅总是一个元素的最后一部分,2)除了一个我想要结束的元素之外,鹅从来没有出现在任何其他元素中(也就是说,我从来没有得到‘鹅福’,但我可能会得到‘鹅’)
发布于 2022-03-31 15:18:20
您可以减少数组,查看前面的字符串,并将数组添加到新组的结果集中。
const
words = ['duck foo bar', 'duck', 'duck bing ', 'bing', 'Bloop#12 goose', 'duck 12', 'duck goose'],
separator = 'goose',
groups = words.reduce((r, s, i, a) => {
if (!i || a[i - 1].includes(separator)) r.push([]);
r[r.length - 1].push(s);
return r;
}, []);
console.log(groups);.as-console-wrapper { max-height: 100% !important; top: 0; }
发布于 2022-03-31 12:12:38
尝尝这个。这应该能做你想要的。
const words = [
'duck foo bar',
'duck',
'duck bing ',
'bing',
'Bloop#12 goose',
'duck 12',
'duck goose'
]
const answer = []
let temp = []
for(let i = 0; i < words.length; i++){
if(words[i].includes('goose')){
temp.push(words[i])
answer.push(temp)
temp = []
} else{
temp.push(words[i])
}
}
console.log(answer)
发布于 2022-03-31 12:11:35
您可以通过一个简单的forEach循环来实现这一点。在下面的示例中,我首先暂时存储这些值。
然后,如果单词包含goose,则将块推入新数组中。
const words = [
'duck foo bar',
'duck',
'duck bing ',
'bing',
'Bloop#12 goose',
'duck 12',
'duck goose',
'abc'
]
const n = []
let tmp = [];
words.forEach((w) => {
if (! w.includes('goose')) {
tmp.push(w);
} else {
tmp.push(w);
n.push(tmp);
tmp = [];
}
});
console.log(n)
https://stackoverflow.com/questions/71692138
复制相似问题