【发布时间】:2021-05-04 17:17:04
【问题描述】:
考虑一个由 30K(或更多)子数组组成的数组,如下所示:
[[A,B],[C,D],[E,F],[G,H]......[D,C],[H,G]]
- 子数组总是只包含 2 个元素。
- 某些子阵列在阵列中的某处有其镜像。
最快从主阵列中删除所有镜像子阵列的方法是什么?如:在上面的示例中,比如说,删除 [D,C] 或 [C,D] 但 NOT 两者?
我尝试过的:
-
.splice()带有一个向后的for循环。 -
forEach循环。 -
.stringify()和.join()。 if (array.indexOf([array[i][1], array[i][0]) > -1)if (array.indexOf(array[i].reverse()) > -1)
似乎没有任何效果,在 forEach 循环情况下结合字符串比较会冻结浏览器。
一个简单的代码,首先看看它是否有效:
for (var i=0; i < l; i++) {
if (arr.indexOf([arr[i][1],arr[i][0]]) > -1) console.log(arr[i])
}
我尝试过的大多数其他事情都是上述代码的变体,但每次整个数组都被记录到控制台时。
更新:
子数组基本上只是英文单词,更具体地说是同义词对。
所以["always","forever"] 存在,[forever, always] 也存在。并非每对/单词都是这种情况,但整个数组中有很多这样的情况。我想遍历整个数组并删除任何 1 个这样的“对”数组。删除哪一个并不重要。最后,生成的数组应该没有“镜像”数组。我希望这能更好地阐明我想要实现的目标。
【问题讨论】:
-
“似乎没有任何效果”:请提供无效的代码。要求 fastest 方式更适合Code Review,但您必须提供工作代码。所以也许专注于一个问题:“我尝试了这个[代码],它为这个[输入]产生了[这个输出],而我期望[这个输出]。我的代码有什么问题?”。
-
您能提供样本输入和预期输出吗?对的元素的数据类型是什么?如果他们不是原始人,你什么时候认为他们是平等的?当镜像出现时,你想保留哪一个? ...
-
@trincot 更新了问题
标签: javascript arrays ecmascript-6