JSFiddle - React, Tailwind, and code Playground

by Kamal Kumawat

JavaScript

var nodes = [1,4,9,11,14,18,20,21,28];
var fingerSize = 5;
var cyclicNodes =[...nodes];
nodes.forEach((val,k)=>{
  cyclicNodes[cyclicNodes.length] = Math.pow(2,fingerSize) + val;
})
function createFingerTable(nodes, fingerSize){
  
  var fingerTable = {};
  
  nodes.forEach((node,key)=>{
    let table = [];
    for(var i = 1; i<= fingerSize; i++){
      let val = node+Math.pow(2, i-1);
   	/* 	 while(val > nodes[nodes.length-1]){
   		         val -= Math.pow(2,fingerSize);
   		       
   		       } */
      
      let selectedNode;
      for(var j = 0; j< cyclicNodes.length; j++){
        if(val <= cyclicNodes[j]) {
          selectedNode = cyclicNodes[j];
          break;
        }
      }
      table.push(selectedNode)
    }
      fingerTable[node] = table;
  });
  return fingerTable;
}
var fingerTable = createFingerTable(nodes, fingerSize)
console.log("table===>>", fingerTable);

function fingerHop(source,key, target = []){
	if(source >= Math.pow(2,fingerSize)){
  	conso
  	source = source - Math.pow(2,fingerSize);
    key = key - Math.pow(2,fingerSize);
  }
target.push(source);
  
	let fingerTabSource = fingerTable[source]
  console.log("--->>",source, fingerTabSource);
  if(key<source) key = key + Math.pow(2,fingerSize)
	if(key <=fingerTabSource[0]){
  	target.push(fingerTabSource[0]);
    return target;
  }else{
  	let i = fingerTabSource.length-1
  	while(i>0){
    	if(key > fingerTabSource[i]){
        return fingerHop(fingerTabSource[i],key,target);
        i=0;
      }else{
      	i--;
      }
    }
  }
  }