【问题标题】:Remove duplicate rows from a matrix javascript从矩阵javascript中删除重复的行
【发布时间】:2020-02-27 19:47:54
【问题描述】:

请阅读:我知道这感觉就像 Stack Overflow 上的回答令人作呕,但我发誓我找不到好的答案。 Besides, marking this as "Possible duplicate" would be too meta!

我有一个特定顺序的值矩阵(在 javascript 中):

[[1,2], [1,2], [3,4], [5,6] [5,6] ]

但是我最近了解到Google charts crashes when there are identical rows。我需要删除重复项;但是,该数组相当大,我无法承受幼稚实现的二次时间。

通常,如果每个行都是可散列的,我会将它们添加到字典 { } 以查看我已经看到的;但是,javascript 不允许对数组进行散列处理。

最好的方法是什么?我想我可以将每一行的数组转换为一个字符串并将其用作键,但这感觉就像一个非常肮脏(并且可能很慢)的黑客攻击。我真的很喜欢你的建议。

【问题讨论】:

  • 当您说“按特定顺序”时,这是否意味着您知道数组已排序?如果是,排序顺序是什么?
  • 你的数组是从哪里来的?你能在创作时这样做吗?
  • @AbrahamP 它没有排序(它是从 XML 文件中提取的)。保持当前顺序很重要,因为它不一定是函数,因此有时可能会向后移动。
  • 从 XML 解析后,使用您自己提到的 [].toString() 方法创建哈希。 XML 解析足够慢,这根本不会显着增加,但您可以创建一个 jsperf.com 测试(并在此处链接到它以供后代使用)。似乎最好在那个时候做,当你完成整个系列的时候。我不会担心速度 - 任何其他方法都会花费您更多,因为您将第二次迭代所有这些。
  • 您能否提供有关数据大小的更多信息?有多少行:数千、一万、数百万?每行平均多长时间?

标签: javascript arrays duplicate-removal


【解决方案1】:

您可以使用 Set 和 JSON Stringify/Parse 轻松删除重复项。所以这种方法会保持矩阵的顺序。

const array = [[1, 2],[1, 2],[3, 4],[5, 6],[5, 6]];
const set = new Set(array.map(JSON.stringify));
const arr = [...set].map(JSON.parse);

console.log(arr);// output : [[1,2], [3,4], [5,6]]

【讨论】:

    猜你喜欢
    • 2011-12-26
    • 2013-03-03
    • 1970-01-01
    • 2017-01-09
    • 2021-11-14
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多