【问题标题】:Rewriting lodash 'fill' function重写 lodash 'fill' 函数
【发布时间】:2019-10-01 04:48:27
【问题描述】:

为了训练JS,我重写了lodash的fill函数。 拜托,改写得比我好。

//////////////// 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]

有没有更优雅的方法来解决这个问题?

【问题讨论】:

标签: javascript lodash


【解决方案1】:

Array.fill() 方法与 lodash 的 _.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]

【讨论】:

  • 我不知道原生fillstartend参数。这非常有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 2016-01-25
相关资源
最近更新 更多