Как разделить массив на основе определенных комбинаций массивов? - PullRequest
0 голосов
/ 22 мая 2019

У меня есть массив, и я хочу разделить его на куски на основе заданной комбинации значений.

Например, у меня есть массив, который содержит только два разных значения, Portrait и Landscape.

['Landscape', 'Landscape', 'Portrait', 'Portrait', 'Landscape', 'Portrait']

Условия, по которым я хочу разделить его, будут

  • Размер массива чанков <= 3. </li>
  • Чанк может иметь только 'Пейзаж' <=2. </li>
  • «Пейзаж» и «Портрет» не могут быть в одном и том же фрагменте.

Итак, я ожидаю, что результат будет такой:

[['Landscape', 'Landscape'], ['Portrait', 'Portrait'],['Landscape'], ['Portrait']

1 Ответ

1 голос
/ 22 мая 2019

Вы можете собрать ограничения для нового чанка в массиве и проверить, является ли одно из ограничений 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; }
...