Array.prototype.entries()
- entries() 方法返回一个新的数组迭代器对象,该对象包含数组中每个索引的键/值对
- 语法
- 返回值
- Array.prototype.myEntries()
Array.prototype.myEntries = function () {
const newThis = []
for (let i = 0; i < this.length; i++) {
newThis[i] = [i, this[i]]
}
return Iterator.from(newThis)
}
Array.prototype.every()
- every() 方法测试一个数组内的所有元素是否都能通过指定函数的测试。它返回一个布尔值
- 语法
- every(callbackFn)
- every(callbackFn, thisArg)
- 参数
- callback:为数组中的每个元素执行的函数。它应该返回一个真值以指示元素通过测试,否则返回一个假值。该函数被调用时将传入以下参数:
- element:数组中当前正在处理的元素
- index:正在处理的元素在数组中的索引
- array:调用了 every() 的数组本身
- thisArg:执行 callbackFn 时用作 this 的值
- 返回值
- 如果 callbackFn 为每个数组元素返回真值,则为 true。否则为 false
- Array.prototype.myEvery()
Array.prototype.myEvery = function (callback, thisArg) {
if (typeof callback !== 'function') {
throw new TypeError(`${typeof callback} is not function`)
} else {
// 使用len的长度做for循环
const len = this.length
for (let i = 0; i < len; i++) {
// 判断当前位置是否是空槽,是的话不做处理,不是的话调用callback函数
if (!this.hasOwnProperty(i)) {
continue
} else {
const value = callback.call(thisArg, this[i], i, this)
// 如果函数值为false,则return false,终止循环
if (!value) return false
}
}
return true
}
}
Array.prototype.fill()
- fill() 方法用一个固定值填充一个数组中从起始索引(默认为 0)到终止索引(默认为 array.length)内的全部元素。它返回修改后的数组
- 语法
- fill(value)
- fill(value, start)
- fill(value, start, end)
- 参数
- value:用来填充数组元素的值。注意所有数组中的元素都将是这个确定的值:如果 value 是个对象,那么数组的每一项都会引用这个元素
- start:基于零的索引,从此开始填充,转换为整数。
- 负数索引从数组的末端开始计算,如果 start < 0,则使用 start + array.length
- 如果 start < -array.length 或 start 被省略,则使用 0
- 如果 start >= array.length,没有索引被填充
- end:基于零的索引,在此结束填充,转换为整数。fill() 填充到但不包含 end 索引
- 负数索引从数组的末端开始计算,如果 end < 0,则使用 end + array.length
- 如果 end < -array.length,则使用 0
- 如果 end >= array.length 或 end 被省略,则使用 array.length,导致所有索引都被填充
- 如果经标准化后,end 的位置在 start 之前或之上,没有索引被填充
- 返回值
- Array.prototype.myFill()
Array.prototype.myFill = function (value, start, end) {
const len = this.length
function getStartOrEnd(val, len) {
let newVal
switch (true) {
case val < 0 && val >= -len:
newVal = len + val
break
case val < -len:
newVal = 0
break
case val >= len || Number.isNaN(val):
newVal = len
break
case val >= 0 && val < len:
newVal = val
break
default:
}
return newVal
}
// 稀疏数组会被填充 可以直接使用for循环 不能用for of或者for in
let newStart = getStartOrEnd(start, len) || 0
let newEnd = getStartOrEnd(end, len) || len
for (let i = 0; i < len; i++) {
/**
* end的位置在start之前或者之上,没有索引被填充
* value不写即为传入默认的undefined
* 从start开始,填充到end,但是不包含end,即如果start等于end,也不进行填充
*/
if (newEnd > newStart && i >= newStart && i < newEnd) {
this[i] = value
}
}
return this
}