JSFiddle - React, Tailwind, and code Playground

by Shishir Morshed

JavaScript

var participant = 17;
var pizzaAr = [2, 5, 6, 8];
var originalList = [2, 5, 6, 8];
var totalSlice = pizzaAr.reduce(function(acc, val) { return acc + val; }, 0);


//check if totalSlice is more than participant
var resultArr = totalSlice > participant ? recurRemove(pizzaAr): pizzaAr;
var result='';

console.log(originalList, resultArr);
resultArr.forEach(function(item){
  result += originalList.indexOf(item) + ' ';
});
alert(resultArr.length + '\n' + result.trim());



function recurRemove(orderdPizza){

  let totalOrderd = orderdPizza.reduce(function(acc, val) { return acc + val; }, 0);
  let updatedOrder = totalOrderd;
  let removedPizza = 0;
  // let updateType = false;
  
  for(var j=0; j<orderdPizza.length; j++){
    
    let currentUpdatedOrderd = totalOrderd - orderdPizza[j];

    
    if(currentUpdatedOrderd == participant){
      //remove piza and break loop
      updatedOrder = totalOrderd - orderdPizza[j];
      removedPizza = orderdPizza[j];
      break;
    }  

    if(updatedOrder < participant && currentUpdatedOrderd < participant && currentUpdatedOrderd > updatedOrder){
      updatedOrder = totalOrderd - orderdPizza[j];
      removedPizza = orderdPizza[j];
    }else if(updatedOrder > participant && currentUpdatedOrderd < participant){
      updatedOrder = totalOrderd - orderdPizza[j];
      removedPizza = orderdPizza[j];
    }else if( Math.abs(currentUpdatedOrderd - participant) < Math.abs(updatedOrder - participant) ){
        updatedOrder = totalOrderd - orderdPizza[j];
        removedPizza = orderdPizza[j];
    }  
     
  }
  
  
  let removedPizzaIndex = orderdPizza.indexOf(removedPizza);
  orderdPizza.splice(removedPizzaIndex, 1);
  // console.log(removedPizza);
  if(orderdPizza.reduce(function(acc, val) { return acc + val; }, 0) > participant && orderdPizza.length> 1){
    recurRemove(orderdPizza);
  }

  return orderdPizza;
  
}