Array.prototype.forEach()
- forEach() 方法对数组的每个元素执行一次给定的函数
- 语法
- forEach(callbackFn)
- forEach(callbackFn, thisArg)
- 参数
- callbackFn
- element:数组中正在处理的当前元素
- index:数组中正在处理的当前元素的索引
- array:调用了 forEach() 的数组本身
- thisArg:执行 callbackFn 时用作 this 的值
- 返回值:undefined
- Array.prototype.myForEach
Array.prototype.myForEach = function (callbackFn, thisArg) {
if (typeof callbackFn !== 'function') {
throw new TypeError(`${typeof callbackFn} is not a function`)
}
const len = this.length
for (let i = 0; i < len; i++) {
// 稀疏数组中空槽不进行处理
if (this.hasOwnProperty(i)) {
// 不能提前终止函数 不支持异步函数
callbackFn.call(thisArg, this[i], i, this)
}
}
}
Array.prototype.includes()
- includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回 false
- 语法
- includes(searchElement)
- includes(searchElement, fromIndex)
- 参数
- searchElement:需要查找的值
- fromIndex:开始搜索的索引(从零开始),会转换为整数
- 负索引从数组末尾开始计数——如果 fromIndex < 0,那么实际使用的是 fromIndex + array.length。然而在这种情况下,数组仍然从前往后进行搜索
- 如果 fromIndex < -array.length 或者省略 fromIndex,则使用 0,这将导致整个数组被搜索
- 如果 fromIndex >= array.length,则不会搜索数组并返回 false
- 返回值:一个布尔值,如果在数组中(或者在 fromIndex 所指示的数组部分中,如果指定 fromIndex 的话)找到 searchElement 值,则该值为 true
- Array.prototype.myIncludes
Array.prototype.myIncludes = function (searchElement, fromIndex) {
let len = this.length
switch (true) {
case fromIndex > -len && fromIndex < 0:
fromIndex = fromIndex + len
break
case fromIndex < -len || fromIndex === undefined:
fromIndex = 0
break
}
let i = fromIndex
while (i < len) {
if (
this[i] === searchElement ||
(Number.isNaN(this[i]) && Number.isNaN(searchElement))
) {
return true
}
i++
}
return false
}
Array.prototype.indexOf()
- indexOf() 方法返回数组中第一次出现给定元素的下标,如果不存在则返回 -1
- 语法
- indexOf(searchElement)
- indexOf(searchElement, fromIndex)
- 参数
- searchElement:数组中要查找的元素
- fromIndex:开始搜索的索引(从零开始),会转换为整数
- 负索引从数组末尾开始计数——如果 fromIndex < 0,那么实际使用的是 fromIndex + array.length。然而在这种情况下,数组仍然从前往后进行搜索。
- 如果 fromIndex < -array.length 或者省略 fromIndex,则使用 0,这将导致整个数组被搜索。
- 如果 fromIndex >= array.length,则不会搜索数组并返回 -1
- 返回值:首个被找到的元素在数组中的索引位置; 若没有找到则返回 -1
- Array.prototype.myIndexOf
Array.prototype.myIndexOf = function (searchElement, fromIndex) {
const len = this.length
// 如果fromIndex在-len到0之间,使用fromIndex+len作为fromIndex
// 如果fromIndex小于-len或者fromIndex为undefined,则使用0作为fromIndex
switch (true) {
case fromIndex < 0 && fromIndex >= -len:
fromIndex = len + fromIndex
break
case fromIndex < -len || fromIndex === undefined:
fromIndex = 0
break
}
while (fromIndex < len) {
if (this.hasOwnProperty(fromIndex) && this[fromIndex] === searchElement) {
return fromIndex
}
fromIndex++
}
return -1
}