在循环数组时修改数组可以接受吗?

2018-07-05 21:11:19 +08:00
 banxi1988

看到 vue-router 中有下面这么一段代码:


  // ensure wildcard routes are always at the end
  for (let i = 0, l = pathList.length; i < l; i++) {
    if (pathList[i] === '*') {
      pathList.push(pathList.splice(i, 1)[0])
      l--
      i--
    }
  }

我感觉边循环数组边修改数组有点怪异。于是进行了如下修改。

  // ensure wildcard routes are always at the end
  const normalPathList = pathList.filter(it => it !== '*')
  const wildcardPathList = pathList.filter(it => it === '*')
  pathList.length = 0
  pathList.push(...normalPathList)
  pathList.push(...wildcardPathList)

然后提了个 Pull Request

意外被拒绝了:

Thanks for your concern! However, this solution goes through the original array multiple times and create multiple arrays

其实呢也就增加了两三次的循环,但是对对于一个前端 pathList 数组来说,数量一般也就 10 多个,或者 100 以内。 多循环一两次没什么大问题。 如果是我的项目的话,我倾向于可读性更好的代码。

不过对于 JavaScript 来说,其实数组并不是数组,跟 Java List 也不一样,而是一个使用索引作为 key 的特殊的对象。

1396 次点击
所在节点    前端开发
2 条回复
noe132
2018-07-06 08:23:42 +08:00
其实怎么写都没问题,影响也不是很大。

很多时候都是看心情罢了。
jedihy
2018-07-06 16:15:17 +08:00
作者很清楚的指出了你的问题。遍历多次数组而且有拷贝。原方法可读性并不差。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/468478

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX