专栏首页BFE.dev前端刷题日记BFE.dev前端刷题88 - 在JavaScript中实现负索引
原创

BFE.dev前端刷题88 - 在JavaScript中实现负索引

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是个很有意思的题目,希望能帮助到你。下次见。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • BFE.dev前端刷题#9. 解密消息 (Facebook面试题)

    无法前进的时候,经过的字符就就是隐藏信息。比如上面的二维数组的话,隐藏消息是IROCLED

    JSer
  • BFE.dev前端刷题#32. 实现`Promise.all()`

    fulfill的data需要存在一个数组里,但是promise的fulfill时机未知,先后顺序不定,所以不能push,而是利用index来放置数据到正确的位置...

    JSer
  • BFE.dev前端刷题 104. 按层遍历DOM树

    可以看到我们只需要不停的从左边取出元素,然后将其子元素从右边不停放入即可。这用queue实现。

    JSer
  • AkShare-实时监控-Argus全网监控

    本次接口是一个小伙伴推荐的,基于人工智能技术构建的全网监控数据接口。简介如下:阿尔戈斯 (Argus Ἄργος) 希腊神话中的百眼巨人 该系统经过五年研发,全...

    AkShare
  • kubernetes学习记录(15)——使用operator-sdk开发operator

    我的电脑环境为windows,安装operator-sdk需要自己编译构建二进制文件。 参考官方文档Compile and install from mast...

    胡了了
  • 如何用Neo4j和Scikit-Learn做机器学习任务?| 附超详细分步教程

    图算法不是一个新兴技术领域,在开源库中已经有很多功能强大的算法实现。近两年,业内的学者与科学家都在积极探索可以弥补深度学习不可解释性,无法进行因果推断的这个缺陷...

    AI科技大本营
  • Makefile文件编写

    make 的参数有很多, 可以通过 make -h 去查看, 下面只介绍几个我认为比较有用的。

    用户2929716
  • loadrunner 脚本开发-字符串编码转换

    int lr_convert_string_encoding(const char *sourceString, const char *fromEncodin...

    授客
  • 【云端安全小建议】-使用EMR分析云审计数据

    云端安全小建议的系列文章,是由腾讯云账号与权限团队的一线开发人员推出的关于用户安全的小建议。该系列文章旨在帮助腾讯云用户能够充分利用腾讯云提供的产品特性,安全的...

    AY
  • 0512-使用Python访问Kerberos环境下的HDFS

    随着Hadoop平台的普及和Python语言的流行,使用Python语言访问操作HDFS的需要,Python也提供了多个访问HDFS的依赖包(如:pyhdfs、...

    Fayson

扫码关注云+社区

领取腾讯云代金券