code: function sliceArrayFromLeft(arr, startIndex, loop) {
      var result = arr;
      if (startIndex) {
        result = arr.slice(startIndex);
        if (loop) {
          result = result.concat(arr.slice(0, startIndex));
        }
      }
      return result;
    }
docs: Methods like filter and find have a direct association between the value returned by the callback and the element of the current iteration. This means that when looping, array elements must match the actual index for which they are being called, so the array must be sliced. This is not the case for methods like forEach and map, which either do not use return values or use them in a way that simply getting the element at a shifted index will not affect the final return value. However, these methods will still fail on sparse arrays, so always slicing them here. For example, if "forEachFromIndex" were to be called on [1,,2] from index 1, although the actual index 1 would itself would be skipped, when the array loops back to index 0, shifting it by adding 1 would result in the element for that iteration being undefined. For shifting to work, all gaps in the array between the actual index and the shifted index would have to be accounted for. This is infeasible and is easily solved by simply slicing the actual array instead so that gaps align. Note also that in the case of forEach, we are using the internal function which handles sparse arrays in a way that does not increment the index, and so is highly optimized compared to the others here, which are simply going through the native implementation.