javascript - 比较三个非常大的数组并创建一个新对象

标签 javascript node.js arrays foreach compare

好吧,我在 node.js 中有三个数组,每个数组大约有 65k 个对象。它们都共享一个 ID - PARCELID、SBL 和 SBL20 是相同的。我想将不同数组中的对象组合成一个对象,然后将其插入最终数组中。无论出于何种原因,我得到的输出包含 130k+ 对象。这也是相当低效的,所以如果有更好的方法来做到这一点,我会洗耳恭听 - 我已经尝试使用map(),尽管我只能比较两个数组,而不是三个。我也想添加第四个。

var final = new Array();
  count=0
  TaxParcels.forEach((TaxParcel) => {
    TaxBills.forEach((TaxBill) => {
      if (TaxParcel.PARCELID == TaxBill.SBL20) {
        CodeEnforcements.forEach((CodeEnforcement) => {
          if (TaxParcel.PARCELID == CodeEnforcement.SBL) {
            parcel = {
              ID: TaxParcel.PARCELID,
              DETAILS: {
                TaxParcel: TaxParcel,
                TaxBill: TaxBill,
                CodeEnforcement: CodeEnforcement,
              },
            };
            final.push(parcel);
            count++
          }
        });
      }
    });
  });
  console.log(final);
  console.log(count)

最佳答案

您可以通过首先创建一个由键作为键控的 Map 并使用与每个 Map 相关的空对象来获得性能提升。然后将对象注入(inject)到这些对象中,并过滤结果以仅包含具有所有 3 个键的对象:

// sample data
let TaxParcels = [{ PARCELID: 3 }, { PARCELID: 9 }, { PARCELID: 7 }];
let TaxBills = [{ SBL20: 9 }, { SBL20: 1 }, { SBL20: 3 }];
let CodeEnforcements = [{ SBL: 3 }, { SBL: 9 }, { SBL: 1 }];

// Solution
let map = new Map([...TaxParcels, ...TaxBills, ...CodeEnforcements].map(o => 
    [o.PARCELID??o.SBL20??o.SBL, {}])
);

for (let o of TaxParcels) map.get(o.PARCELID).TaxParcel = o;
for (let o of TaxBills) map.get(o.SBL20).TaxBill = o;
for (let o of CodeEnforcements) map.get(o.SBL).CodeEnforcement = o;

let result = [...map.values()].filter(o => Object.keys(o).length === 3);
console.log(result);
console.log(result.length);

关于javascript - 比较三个非常大的数组并创建一个新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68608977/

相关文章:

javascript - 为什么通过 Ajax 而不是通过常规 Http 请求发送文件对象数组是安全的?

javascript - 如何为 Prepack 正确定义 Node.js 函数和属性?

node.js - 我可以将 session 缓存服务用于 Node.js 应用程序吗?

javascript - fullcalendar V4 dayClick 未触发

javascript - 脚本 438 : Object doesn't support property or method 'circular'

node.js - React 不显示使用 Multer 上传的图像

c - 通过数组用 C 编写的人脸检测器程序

php - 从数组中删除重复项

javascript - 将数组中对象的最大值显示为两个最大值

javascript - 在迭代时追加字符串