Interweaving an array's values
One approach would be to utilize .splice() instead of .slice() and .shift(). 

If the input array is expected to be mutated const copy = [...arr] can be removed and the array methods can be called on input arr : data



let data = [1,2,3,4,5,6,7,8,9,0];

const interweave = arr =&gt; {
  const copy = [...arr];  // copy input
  const r = copy.splice(Math.ceil(copy.length / 2)); // splice half of input
  for (let i = 1; r.length; i += 2) // set `i` to `1` increment by `2`
    copy.splice(i, 0, r.shift()); // use `.splice()` and `.shift()`
  return copy; // return `copy`
}

console.log(interweave(data));