Задать вопрос
@Dichkin
gg

Как найти определенную последовательность в массиве объектов?

К примеру есть 2 массива объектов.
let arr1 = [ { value: '2'}, { value: '4'}, { value: '11'}, { value: '7'}, { value: '8'}, { value: '9'} ];

let arr2 = [ { value: '5'}, { value: '20'}, { value: '5'}, { value: '7'}, { value: '9'}, { value: '11'} ];


В массиве arr1 последние 3 элемента будут восходящей последовательностью (7, 8, 9)
В массиве arr2 последние 4 элемента будут восходящей последовательностью (5, 7, 9, 11)

Как вернуть последовательность при условии, что первый элемент перед ней > первого элемента начала последовательности ?
  • Вопрос задан
  • 153 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
XanXanXan
@XanXanXan
function findSequence(arr) {
  const fistSequenceEl = arr.findLastIndex((e, i) =>  i === 0 || +e.value < +arr[i - 1].value);
  return arr.slice(fistSequenceEl);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
Попробуй это:
код
function findSequence(arr) {
    let maxSequence = [];
    let currentSequence = [];

    for (let i = 1; i < arr.length - 1; i++) {
        const currentValue = parseInt(arr[i].value, 10);
        const prevValue = parseInt(arr[i - 1].value, 10);
        const nextValue = parseInt(arr[i + 1].value, 10);

        if (prevValue > currentValue && currentValue < nextValue) {
            currentSequence = [arr[i]];
        } else if (currentSequence.length > 0 && currentValue < nextValue) {
            currentSequence.push(arr[i]);
        } else {
            currentSequence = [];
        }

        if (currentSequence.length > maxSequence.length) {
            maxSequence = currentSequence.slice();
        }
    }

    if (currentSequence.length > 0 && parseInt(arr[arr.length - 1].value, 10) > parseInt(arr[arr.length - 2].value, 10)) {
        currentSequence.push(arr[arr.length - 1]);
        if (currentSequence.length > maxSequence.length) {
            maxSequence = currentSequence.slice();
        }
    }

    return maxSequence;
}

let arr1 = [{ value: '2' }, { value: '4' }, { value: '11' }, { value: '7' }, { value: '8' }, { value: '9' }];
let arr2 = [{ value: '5' }, { value: '20' }, { value: '5' }, { value: '7' }, { value: '9' }, { value: '11' }];

console.log(findSequence(arr1)); // (7, 8, 9)
console.log(findSequence(arr2)); // (5, 7, 9, 11)

Результат верный. Для первого вызова - (7, 8, 9), а для второго - (5, 7, 9, 11).

К слову, код довольно кривой, так как это просто пример того, как найти определенную последовательность в массиве объектов. Подредактируй под свои нужды.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы