•
阅读 2 分钟
相对索引 `at` 方法
在 Array.prototype.at
、各种类数组和 String.prototype.at
上的新方法 at
使得访问一个靠近集合末端的元素变得更加简单和简洁。
从一个集合的末端访问第 N 个元素是一个常见的操作。然而,通常的方法是很冗长的,比如 my_array[my_array.length - N]
,或者性能不是很好,比如 my_array.slice(-N)[0]
。新的 at
方法使这个操作更符合人机工程学原理,它把负数参数解释为“从尾到头”。之前的例子可以表示为 my_array.at(-N)
。
为了统一起见,也支持正参数,并且等同于普通的属性访问。
这个新方法足够小,它的完整语义可以通过下面这个符合要求的 polyfill 实现来理解:
/**
* Array.prototype.at 的 polyfill
* @param arr {Array} an array
* @param n {number} index of arr
* @returns {undefined|*} arr.at(n)
*/
function at(arr, n) {
// 把 n 转换为整数
n = Math.trunc(n) || 0
// 允许从尾部开始索引的负数
if (n < 0) n += arr.length
// 超出索引范围时返回 undefined
if (n < 0 || n >= arr.length) return undefined
// 最后,使用一般的索引属性访问
return arr[n]
}
// at([1, 2], -1) // 2
关于字符串对象的一句话
由于 at
最终执行的是普通的索引,在字符串值上调用 at
会返回代码单位,就像普通索引一样。就像在字符串上的普通索引一样,代码单位可能不是你想要的 Unicode 字符串!请考虑是否更适合你的使用情况。请考虑 String.prototype.codePointAt()
是否更适合于你的使用情况。
支持 at
方法
方法 at
的环境支持情况:
- Chrome 92+
- Firefox 90+
- Safari 15.4+
- Node.js 16.8.0
- Babel(通过
core-js
支持)
本文由 吳文俊 翻译,原文地址
at
method for relative indexing
标签: javascript array esnext