JSFiddle - React, Tailwind, and code Playground

by tanvir_alam_shawn

JavaScript

function update(array, index, value) {    
    let delta = array[index].value - value,
        increment = Math.sign(delta);

    array[index].value = value;

    while (delta) {
      var expressionIndexToUpdate = findPointer(array);
      var expressionToUpdate = array[expressionIndexToUpdate];
      console.log(expressionToUpdate, increment)
      if (increment > 0) {
      	expressionIndexToUpdate = expressionToUpdate.prev;
      	expressionToUpdate = array[expressionIndexToUpdate]; 
      } 
      
      console.log(expressionToUpdate)
      
      if (expressionIndexToUpdate === index) {
      	if (increment < 0) {
        	expressionIndexToUpdate = expressionToUpdate.next;
        } else {
        	expressionIndexToUpdate = expressionToUpdate.prev;
        }
        expressionToUpdate = array[expressionIndexToUpdate];
      }
      
      console.log(expressionToUpdate)
      
      expressionToUpdate.value += increment;
      clearPointers(array);
      if (increment < 0) {
      	array[expressionToUpdate.next].pointer = true
      } else {
      	expressionToUpdate.pointer = true
      }
      
      delta = delta - increment;
    }
}

function findPointer(collections) {
  for (var i=0; i <= collections.length; i++) {
  	if (collections[i].pointer) {
    	return i;
    }
  }
}

function clearPointers(collections) {
	collections.forEach(function (exp) {
  	exp.pointer = false;
  })
}

var collections = [
        { value: 20, next: "1", prev: "4", lastUpdated: false, isLoaked: false, pointer: true },
        { value: 20, next: "2", prev: "0", lastUpdated: false, isLoaked: false, pointer: false },
        { value: 20, next: "3", prev: "1", lastUpdated: false, isLoaked: false, pointer: false },
        { value: 20, next: "4", prev: "2", lastUpdated: false, isLoaked: false, pointer: false },
        { value: 20, next: "0", prev: "3", lastUpdated: false, isLoaked: false, pointer: false }
    ];

update(collections, 2, 25);
console.log(collections,...