js函数的原理仿写(JavaScript)一

Lodash中文官网https://www.lodashjs.com/

1、_.findIndex与_.find

_.find返回数组中某个符合条件的第一个值

_.find(function(currentValue, [index], [arr]),[thisValue])

参数:
function(currentValue, index, arr):每个元素需要执行的函数
currentValue:当前元素
[index]: 当前元素索引值
[arr]: 当前元素所属的数组对象
[thisValue]: 传递给函数的值

返回值:
返回符合条件的第一个元素的值,否则返回undefined

示例

let arr = [0,1,3,-5,7,10]
console.log(arr.find((n) => n < 0))
// 打印结果:-5

仿写原理

let arr = [0,1,3,-5,7,10]
function res() {
	// 循环每一个元素执行一遍方法
	for(let i=0; i<arr.length; i++) {
		// 符合条件,则返回该元素
	   if (arr[i] >100) {
	     return arr[i]
	   }
	}
}
console.log(res())
// 打印结果: undefined

_.findIndex返回数组中某个符合条件的第一个索引值

_.findIndex(array, [predicate=_.identity], [fromIndex=0])

参数:
array : 要搜索的数组。
[predicate=_.identity] : 这个函数会在每一次迭代调用。
[fromIndex=0] : 搜索的索引。

返回值:
(number): 返回找到元素的索引值(index),否则返回 -1。

示例

let arr = [0,1,3,-5,7,10]
console.log(arr.findIndex((n) => n < 0))
// 打印结果:3

仿写原理

let arr = [0,1,3,-5,7,10]
function res() {
	// 循环每一个元素执行一遍方法
	for(let i=0; i<arr.length; i++) {
		// 符合条件,返回元素的索引值
	   if (arr[i] >100) {
	     return i
	   }
	}
}
console.log(res())
// 打印结果: -1
2、_.startsWith

_.startsWith检查字符是否以某开头

_.startsWith([string=''], [target], [position=0])

参数:
[string=‘’] (string): 要检索的字符串。
[target] (string): 要检查的字符串。
[position=0] (number): 检索的位置。

返回值:
(boolean): 如果string以 target,那么返回true,否则返回 false 。

示例:

_.startsWith('abc', 'b', 1)
console.log('abc'.startsWith( 'b', 1))
// 打印结果:true

仿写原理:

let string = 'abc'
function res(target, position) {
	// 字符串每一个循环执行
	for(let i=0; i<string.length; i++) {
		if(string[i] == target) {
			if(!position) {
				return true
			} else {
				if(i == Number(position)) {
					return true
				} else {
					return false
				}
			} else { // 如果不存在符合的
				return false
			}
		}
	}
}
2、indexOf()

返回某个指定的字符串值在字符串中首次出现的位置

string.indexOf(searchvalue,[start])

参数:
searchvalue:规定需要检索的字符串值
[start]:开始检索的字符串位置,默认为0

返回值:
Number:查找指定字符串第一次出现的位置,如果没找到匹配的字符串则返回 -1。

示例:

var str="Hello world, welcome to the universe.";
var n=str.indexOf("e");
console.log(n)
// 打印结果: 1

仿写原理:

// 1------------------------------------切割比较
/**
 * 循环字符串,并按照匹配字符串的数量切割,比较切割后的字符串和匹配字符串
 * @type {string}
 * @param {string} string 原始字符串
 * @param {string} searchString 匹配字符串
 * @param {number} start 匹配的起始位置,默认为0
 */
let str = 'abc hello world he is a good man';
console.log(_indexOf(str, 'he'))
function _indexOf(string, searchString, start) {
  // 返回的下标
  let index = -1
  // 记录开始位置,如果开始位置大于原始字符串则必定不会存在
  if (start && Number(start) > string.length){
    return index
  }
  for (let i= start ? Number(start) : 0; i<string.length; i++) {
    if (string.substr(i, searchString.length) === searchString) {
      index = i
      break
    }
  }
  return index
}

// 2------------------------------------循环比较
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值