UNPKG

js-wrench

Version:

JS函数库

47 lines (46 loc) 1.45 kB
import isArray from './isArray' import isString from './isString' import isObj from './isObj'; import toKeys from './toKeys'; import has from './has'; import isPrimitive from './isPrimitive'; /** * @description indexOf 从头到尾地检索 如果有返回索引值 * * @param {(any[] | string)} data 需要查找的数组或者字符串 * @param {any} ele 指定的值, 可以是数字,字符串,对象 * @param {(number | undefined)} [fromIndex] 从指定位置开始查找 可选 * @return {*} {number} 返回第一次出现的索引, 如果没有找到, 则返回-1 * @example indexOf([1,2,3], 1) => 0 indexOf([{c:1}, {a:1,b:2}], {a:1}) => -1 indexOf([[1], [2,3]], [2,3]) => 1 */ const indexOf = ( data: any[] | string, ele: any, fromIndex?: number ): number => { if(!isArray(data) && !isString(data)) return -1; let len: number = data.length if (len === 0) return -1 let index: number = fromIndex || 0 let i: number = Math.max( index >= 0 ? index : data.length - Math.abs(fromIndex as number), 0 ) while (i < len) { if(!isPrimitive(ele)) { const keys:any[] = isObj(ele) ? toKeys(ele) : ele let sum:number = 0; for(let key in ele) { if(has(data[i], key) && data[i][key] === ele[key]) { sum++ //用计数的方式判断 } } if(sum === keys.length) return i; }else { if (data[i] === ele) return i } i++ } return -1 } export default indexOf