JSFiddle - React, Tailwind, and code Playground

by Anurag Udasi

JavaScript

/**
	array.splice(start)
  array.splice(start, deleteCount)
  array.splice(start, deleteCount, item1, item2..)
  
  returns deleted elements array
  mutates the array
  
  start => 
  				 > length of array, then length
           < 0, then start from the end of array
  deleteCount =>
  				= < 0, none deleted
          > array.length - start, array.length
*/

Array.prototype.mySplice = function(start, deleteCount, ...items) {
	let newArray = [], deleteElementsArray = [], i, item;
	if (start) {
  	if (start > this.length) {
    	start = this.length;
    } else if (start < 0) {
    	start = this.length + start;
    }
  } else {
  	start = 0;
  }
  
  if (deleteCount) {
  	if (deleteCount < 0) {
    	deleteCount = 0;
    } else if (deleteCount >= this.length) {
    	deleteCount = this.length;
    } else if (deleteCount + start >= this.length) {
    	deleteCount = this.length - start;
    }
  } else {
  	deleteCount = this.length - start;
  }
  
  for (i = 0; i < start; i++) {
  	newArray[i] = this[i];
  }
  for (; deleteCount; deleteCount--) {
  	deleteElementsArray.push(this[i++]);
  }
  for (; i < this.length; i++) {
  	newArray.push(this[i]);
  }
  for (item of items) {
  	newArray.push(item);
  }
  for (i = 0; i < newArray.length; i++) {
  	this[i] = newArray[i];
  }
  this.length = newArray.length;
  return deleteElementsArray;
};

var arr1 = [1,2,3,4];
console.log('deleted array', arr1.mySplice(1));
console.log('array itself', arr1);

var arr1 = [1,2,3,4];
console.log('deleted array', arr1.splice(1));
console.log('array itself', arr1);

var arr2 = [1,2,3,4];
console.log('deleted array', arr2.mySplice(1, 2));
console.log('array itself', arr2);

var arr2 = [1,2,3,4];
console.log('deleted array', arr2.splice(1, 2));
console.log('array itself', arr2);

var arr3 = [1,2,3,4];
console.log('deleted array', arr3.mySplice(1, 3, 5, 6, 7));
console.log('array itself', arr3);

var arr3 = [1,2,3,4];
console.log('deleted array', arr3.splice(1, 3, 5, 6,...