Попробовал написать функцию копирования участка массива и вставка в определенный индекс этого же массива. (аналог встроенного метода Array.prototype.copyWithin).
let copyWithin = (arr, index, startIndex = 0, endIndex = arr.length) => {
startIndex = startIndex < 0 ? arr.length + startIndex : startIndex;
endIndex = endIndex < 0 ? arr.length + endIndex : endIndex;
let tmpArr = [];
for (let i = startIndex; i < endIndex; i += 1) {
tmpArr.push(arr[i]);
}
arr.splice(index, tmpArr.length, ...tmpArr);
};
let arr = [1, 2, 3, 4, 5];
copyWithin(arr, 1, 2, 4);
console.log(arr); // [1, 3, 4, 4, 5]
В конце начиная с определенного индекса удаляю количество элементов равное длине копированного участка и на их место вставляю копию.
arr.splice(index, tmpArr.length, ...tmpArr);
Для вставки элементов копии использовал оператор "..."
Посмотрел транспилированный код. Хотел узнать как будет организована вставка именно элементов скопированного массива, а не самого массива, без оператора "..."
В итоге в транспилировнном коде получилась строка:
arr.splice.apply(arr, [index, tmpArr.length].concat(tmpArr));
В общем, объясните, как понять эту строку. Вообще догнать не могу как она устроена. Какие шаги выполняются.
Что это за конструкция?
[index, tmpArr.length].concat(tmpArr)