Перезаписывающая функция lodash 'fill' - PullRequest
0 голосов
/ 01 октября 2019

Я переписал функцию fill lodash с целью обучения JS. Пожалуйста, переписайте его лучше, чем я.

//////////////// fill(array, value, [start=0], [end=array.length]) ////////////////

Заполняет элементы массива значением от начала до, но не включая конец.

let array = [1, 2, 3];

function fill (arr, filler, start = 0, end = arguments[0].length) { 
  filler = new Array(end - start).fill(filler);
  let temp = arr;
  temp.splice(start,end === arguments[0].length ? end : end - 1, ...filler);
  return temp
}

console.log(fill(array, 'a')); 
// => ['a', 'a', 'a']

console.log(fill(Array(3), 2));
// => [2, 2, 2]

console.log(fill([4, 6, 8, 10], '*', 1, 3));
// => [4, '*', '*', 10]

console.log(fill([4, 6, 8, 10,12,14,18,20], '*', 1, 3));
// => [4, "*", "*", 10, 12, 14, 18, 20]

Есть ли более элегантный способподойти к этому?

1 Ответ

1 голос
/ 01 октября 2019

Метод Array.fill() практически идентичен методу _.fill() Лодаша. Основным отличием является способ его применения к массиву.

const fill = (arr, ...args) => arr.fill(...args);

console.log(fill([1, 2, 3], 'a')); // => ['a', 'a', 'a']

console.log(fill(Array(3), 2)); // => [2, 2, 2]

console.log(fill([4, 6, 8, 10], '*', 1, 3)); // => [4, '*', '*', 10]

console.log(fill([4, 6, 8, 10,12,14,18,20], '*', 1, 3)); // => [4, "*", "*", 10, 12, 14, 18, 20]
...