关于javascript:BFEdev前端刷题88-在JavaScript中实现负索引

3次阅读

共计 676 个字符,预计需要花费 2 分钟才能阅读完成。

bfe.dev 是一个针对前端的刷题网站,像是前端的 LeetCode。该系列文章是我在下面的刷题日记。

题目 88

BFE.dev#88 在 JavaScript 中实现负索引

剖析

首先看一下 example

第一直觉是能够间接返回一个固定的 object, 比方这样{0:1, 1:2, 2:3, -1:3, -2:2, -3:1}。然而这样搞数据是死的,上面的题目要求很难实现。

咱们能够用 getter/setter 来实现和原来数组的数据同步,比方这样:

然而除了 -1, 还有 -2, -3, …-originalArr.length. 当数组 length 变动的时候得同步更新这些 property。不是不可能,然而比拟苦楚

救世主 Proxy

从题目的 example 能够看出,咱们须要的实际上是一个“代理”一样的货色

  1. 所有数据的存取都是在原来的数组进行
  2. 只是在 index 是正数的时候,咱们略微改变一下存取的对象

首先咱们写一个最根本 proxy:

这个 Proxy 齐全 proxy 到原数组,啥也不做。所以测试用例中的 non-negative index 的局部实际上还能通过。

解决负索引

get 中的 prop 不是 number,咱们 parse 一下,而后转换为正确的 index 就 ok 了

not iterable!

啊,[…arr] 测试没通过。

[…arr] 实际上调用的是指标的 Symbol.Iterator 办法, 因为咱们的 proxy 不领有数组,咱们须要把这个调用代理到原数组上。这时候能够用 Function.prototype.bind()达到目标。

通过!撒花!

这在 BFE.dev 是个很有意思的题目,心愿能帮忙到你。下次见。

正文完
 0