JSFiddle - React, Tailwind, and code Playground

by tanvir_alam_shawn

JavaScript

function update(array, index, value) {
    function go(index, direction) {
        do {
            array[index].value += increment;
            if (!(delta -= increment)) return;
            index = array[index][direction];
        } while (!array[index].pointer)
    }
    
    let delta = array[index].value - value,
        increment = Math.sign(delta);

    array[index].value = value;
    array[index].pointer = true;

    while (delta) {
        go(array[index].prev, 'prev');
        if (!delta) break;
        go(array[index].next, 'next');
    }

    array[index].pointer = false;
}

/*var collections = [
        { value: 34, next: "1", prev: "2", lastUpdated: false, isLoaked: false, pointer: false },
        { value: 33, next: "2", prev: "0", lastUpdated: false, isLoaked: true, pointer: false },
        { value: 33, next: "0", prev: "1", lastUpdated: false, isLoaked: false, pointer: false }
    ];*/

var collections = [
        { value: 100, next: "1", prev: "1", lastUpdated: false, isLoaked: false, pointer: false },
        { value: 0, next: "0", prev: "0", lastUpdated: false, isLoaked: true, pointer: false }
    ];
update(collections, 0, 98);
console.log(...collections.map(({ value }) => value));