Array method 系列之八
-
join
:通过把array
的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入separator
字符串而生成的。
function join(array, separator) {
// 调用原生join方法实现
return array == null ? '' : nativeJoin.call(array, separator);
}
-
last
:返回数组最后一个元素。
function last(array) {
const length = array == null ? 0 : array.length
// 最后一个元素 == array[length - 1]
return length ? array[length - 1] : undefined
}
-
lastIndexOf
:从数组的尾部查询需查找的元素,如找到匹配值返回下标,否则返回-1;类似indexOf
。
function lastIndexOf(array, value, fromIndex) {
var length = array == null ? 0 : array.length;
if (!length) {
return -1;
}
var index = length;
if (fromIndex !== undefined) {
index = toInteger(fromIndex);
index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
}
// 确定查询起始位置index
return value === value
? strictLastIndexOf(array, value, index)
: baseFindIndex(array, baseIsNaN, index, true);
}
// strictIndexOf
function strictLastIndexOf(array, value, fromIndex) {
let index = fromIndex + 1
// 从尾部遍历查询
while (index--) {
if (array[index] === value) {
return index
}
}
return index
}
// baseFindeIndex是通过谓词判定比较值是否相等
-
nth
:返回数组的第n
个元素
function nth(array, n) {
const length = array == null ? 0 : array.length
if (!length) {
return
}
// 判断n是否小于0
n += n < 0 ? length : 0
// isIndex判断n是否是有效的index,如果有效,返回array[n],否则,返回undefined
return isIndex(n, length) ? array[n] : undefined
}