You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript单轮迭代实现数据转换:如何避免Set内两次遍历操作

解决方案

你可以在单轮遍历原数组的同时,将每一项的前两个元素依次加入Set,全程仅需遍历一次原数组,无需生成额外的中间数组。Set本身会保留元素的插入顺序,最终输出的结果顺序和你原本的实现完全一致:

const uniqueVals = new Set()
for (const item of data) {
  uniqueVals.add(item[0])
  uniqueVals.add(item[1])
}
const transformedData = [...uniqueVals]

如果偏好函数式写法,也可以用reduce实现同等效果:

const transformedData = [...data.reduce((acc, cur) => acc.add(cur[0]).add(cur[1]), new Set())]

效率对比

你原本的实现会先执行两次map遍历完整的原数组,分别提取所有source和target值,再将两个数组合并后交给Set做去重,总共有3次数组遍历操作。上述方案仅需要1次原数组遍历,时间和内存开销都更低。


内容的提问来源于stack exchange,提问作者JsNgian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:48:04