lodash-4 fill,toInteger

前言

今天是 lodash 第四期,带来的函数是 fill 比较简单的一个方法

Api

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

source npm package

Fills elements of array with value from start up to, but not including, end.

Note:  This method mutates array.
这个方法会改变原数组

Arguments

  1. array  (Array) : The array to fill.
  2. value  (*) : The value to fill array with.
  3. [start=0]  (number) : The start position.
  4. [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 传递了非数字类型的值,转化为 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);
}
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值,初始化为 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;
}
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 的话,赋值为 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;
}
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 端午补班

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYUw27th' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片