【问题标题】:Finding similar values in multiple arrays of objects在多个对象数组中查找相似值
【发布时间】:2021-09-24 01:57:31
【问题描述】:

数据:

array1 = [{"location": "The Green Lion", "postcode": "E1 6QE"}, {"location": "Diners Inn", "postcode": "E6 5FD"}]
array2 = [{"location": "Green Lion", "postcode": "E1 6QE"}, {"location": "Diner's Inn", "postcode": "E6 5FD"}]
array3 = [{"location": "The Green Lion", "postcode": "E1 6QE"}, {"location": "Diner Inn", "postcode": "E6 5FD"}]
//array1 size - 350 | array2 size - 544 | array3 size - 88

我正在使用fuzzy 比较函数来查找数组中的相似元素。我面临的问题是,我目前的实现方式是将 3 个数组组合成 1 个数组,然后循环两次,然后模糊比较 location

combined.forEach(function (x) {
        combined.forEach(function (y) {
            if (fuzz.token_sort_ratio(x.location, y.location) > 80) {
                //Logic 
            }
        });
    });

有没有比嵌套 for 循环更有效的方法来实现这一点?组合数组大小为 958,这意味着运行了 917,764 次迭代,这似乎不是实现这一目标的有效方法,但因为 location 的值并不总是保证相同,我不能使用.find() 函数(或者我可以吗?)。

【问题讨论】:

    标签: javascript node.js arrays performance logic


    【解决方案1】:

    我建议创建位置地图并将结果存储在四叉树中。 JavaScript 支持四叉树 - 请参阅

    https://github.com/timohausmann/quadtree-js

    我在实践中成功使用了四叉树(用 C++ 实现)。对于大型数据集,它似乎比二次算法快至少 10 倍。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      相关资源
      最近更新 更多