我有一个数组,想根据给定的值组合将它们划分为大块。
例如,我有一个数组,其中仅包含两个不同的值,即Portrait和Landscape。
['Landscape', 'Landscape', 'Portrait', 'Portrait', 'Landscape', 'Portrait']
我希望将其划分的条件是
因此,我希望输出如下:
[['Landscape', 'Landscape'], ['Portrait', 'Portrait'],['Landscape'], ['Portrait']
答案 0 :(得分:1)
您可以收集数组中新块的约束,并检查约束之一是否为true
,然后将新块添加到结果集中。
var array = ['Landscape', 'Landscape', 'Portrait', 'Portrait', 'Landscape', 'Portrait'],
constraints = [
(chunk, v) => v !== chunk[0],
(chunk, v) => v === 'Landscape' && chunk.length === 2,
chunk => chunk.length === 3
],
chunks = array.reduce((r, v) => {
var last = r[r.length - 1];
if (!last || constraints.some(fn => fn(last, v))) r.push(last = []);
last.push(v);
return r;
}, []);
console.log(chunks);
.as-console-wrapper { max-height: 100% !important; top: 0; }