前言
今天是 lodash
第四期,带来的函数是 fill
比较简单的一个方法
Api
_.fill(array, value, [start=0], [end=array.length])
Fills elements of array
with value
from start
up to, but not including, end
.
Note: This method mutates array
.
这个方法会改变原数组
Arguments
array
(Array) : The array to fill.value
(*) : The value to fillarray
with.[start=0]
(number) : The start position.[end=array.length]
(number) : The end position.
Returns
(Array) : Returns array
.
Example
var array = [1, 2, 3];_.fill(array, 'a');console.log(array);// => ['a', 'a', 'a']_.fill(Array(3), 2);// => [2, 2, 2]_.fill([4, 6, 8, 10], '*', 1, 3);// => [4, '*', '*', 10]var array = [1, 2, 3]; _.fill(array, 'a'); console.log(array); // => ['a', 'a', 'a'] _.fill(Array(3), 2); // => [2, 2, 2] _.fill([4, 6, 8, 10], '*', 1, 3); // => [4, '*', '*', 10]var array = [1, 2, 3]; _.fill(array, 'a'); console.log(array); // => ['a', 'a', 'a'] _.fill(Array(3), 2); // => [2, 2, 2] _.fill([4, 6, 8, 10], '*', 1, 3); // => [4, '*', '*', 10]
source
function fill(array, value, start, end) {var length = array == null ? 0 : array.length;if (!length) {return [];}// 如果 start 传递了非数字类型的值,转化为 0if (start && typeof start != 'number') {start = 0;end = length;}return baseFill(array, value, start, end);}function fill(array, value, start, end) { var length = array == null ? 0 : array.length; if (!length) { return []; } // 如果 start 传递了非数字类型的值,转化为 0 if (start && typeof start != 'number') { start = 0; end = length; } return baseFill(array, value, start, end); }function fill(array, value, start, end) { var length = array == null ? 0 : array.length; if (!length) { return []; } // 如果 start 传递了非数字类型的值,转化为 0 if (start && typeof start != 'number') { start = 0; end = length; } return baseFill(array, value, start, end); }
baseFill
baseFill 接收四个参数,分别是 要填充的数组 array
,要填充的值 value
,填充的开始值 start
,填充的结束值 end
function baseFill(array, value, start, end) {var length = array.length;// 如果 不存在 start值,初始化为 0if(start == undefined) start = 0;// 如果是 负数,可能是想从右往左查找if (start < 0) {start = -start > length ? 0 : (length + start);}// end 可能不存在// 如果不存在的话,或者 end 大于 length,就取用 lengthend = (end === undefined || end > length) ? length : end;// 和 start 同样的道理if (end < 0) {end += length;}end = start > end ? 0 : end;while (start < end) {array[start++] = value;}return array;}function baseFill(array, value, start, end) { var length = array.length; // 如果 不存在 start值,初始化为 0 if(start == undefined) start = 0; // 如果是 负数,可能是想从右往左查找 if (start < 0) { start = -start > length ? 0 : (length + start); } // end 可能不存在 // 如果不存在的话,或者 end 大于 length,就取用 length end = (end === undefined || end > length) ? length : end; // 和 start 同样的道理 if (end < 0) { end += length; } end = start > end ? 0 : end; while (start < end) { array[start++] = value; } return array; }function baseFill(array, value, start, end) { var length = array.length; // 如果 不存在 start值,初始化为 0 if(start == undefined) start = 0; // 如果是 负数,可能是想从右往左查找 if (start < 0) { start = -start > length ? 0 : (length + start); } // end 可能不存在 // 如果不存在的话,或者 end 大于 length,就取用 length end = (end === undefined || end > length) ? length : end; // 和 start 同样的道理 if (end < 0) { end += length; } end = start > end ? 0 : end; while (start < end) { array[start++] = value; } return array; }
再分享一个函数 toInteger
toInteger
example
* _.toInteger(3.2);* // => 3** _.toInteger(Number.MIN_VALUE);* // => 0** _.toInteger(Infinity);* // => 1.7976931348623157e+308** _.toInteger('3.2');* // => 3*/* _.toInteger(3.2); * // => 3 * * _.toInteger(Number.MIN_VALUE); * // => 0 * * _.toInteger(Infinity); * // => 1.7976931348623157e+308 * * _.toInteger('3.2'); * // => 3 */* _.toInteger(3.2); * // => 3 * * _.toInteger(Number.MIN_VALUE); * // => 0 * * _.toInteger(Infinity); * // => 1.7976931348623157e+308 * * _.toInteger('3.2'); * // => 3 */
也就是向下取整,也可以使用 Math.floor
, 但是 Math.floor(Infinity)
的返回值是 Infinity
source
toInteger
方法是为了解决小数问题,通过 result % 1
获取小数部分,比如 3 % 1 == 0
, 3.1 % 1 == 0.1
,然后判断是否有 余数(remainder)
,使用 原始数据 - 余数
即可获取整数
function toInteger(value) {var result = toFinite(value),remainder = result % 1;return result === result ? (remainder ? result - remainder : result) : 0;}function toInteger(value) { var result = toFinite(value), remainder = result % 1; return result === result ? (remainder ? result - remainder : result) : 0; }function toInteger(value) { var result = toFinite(value), remainder = result % 1; return result === result ? (remainder ? result - remainder : result) : 0; }
使用 toFinite
把数字进行格式化
var INFINITY = 1 / 0,MAX_INTEGER = 1.7976931348623157e+308;function toFinite(value) {// 如果 不存在 value 的话,赋值为 0if (!value) {return value === 0 ? value : 0;}// 如果 value 是 1 /0 也就是 Infinity// 也可以直接使用 value === Infinityif (value === INFINITY || value === -INFINITY) {var sign = (value < 0 ? -1 : 1);return sign * MAX_INTEGER;}return value === value ? value : 0;}var INFINITY = 1 / 0, MAX_INTEGER = 1.7976931348623157e+308; function toFinite(value) { // 如果 不存在 value 的话,赋值为 0 if (!value) { return value === 0 ? value : 0; } // 如果 value 是 1 /0 也就是 Infinity // 也可以直接使用 value === Infinity if (value === INFINITY || value === -INFINITY) { var sign = (value < 0 ? -1 : 1); return sign * MAX_INTEGER; } return value === value ? value : 0; }var INFINITY = 1 / 0, MAX_INTEGER = 1.7976931348623157e+308; function toFinite(value) { // 如果 不存在 value 的话,赋值为 0 if (!value) { return value === 0 ? value : 0; } // 如果 value 是 1 /0 也就是 Infinity // 也可以直接使用 value === Infinity if (value === INFINITY || value === -INFINITY) { var sign = (value < 0 ? -1 : 1); return sign * MAX_INTEGER; } return value === value ? value : 0; }
2023/6/25 端午补班
© 版权声明
文章版权归作者所有,未经允许请勿转载,侵权请联系 admin@trc20.tw 删除。
THE END