javascript - 循环遍历 2 个 Json 文件,其中每个 200k 记录
问题描述
我有 2 个大 json 文件,每个文件有 200k 个对象,当我尝试在 2 个 json 之间循环以获取公共 id 时,执行需要更多时间。
实施1
for (var i in matterData.data) {
const fobj = matterData.data[i];
const ma_array = [];
for (var j in activityData.data) {
const aobj = activityData.data[j];
if (fobj.id === aobj.matter.id) {
ma_array.push(aobj);
}
if (ma_array.length > 0) fobj.activities = ma_array;
}
}
实施 2
for (var i in matterData.data) {
//Activities
matters_array = [];
matters_array = activityData.data.filter(function (el) {
if (el.matter !== null) return el.matter.id == matterData.data[i].id;
});
if (matters_array.length > 0) matterData.data[i]["activities"] = matters_array;
}
实施 3
for (var i in matterData.data) {
matters_array = [];
for (var j in activityData.data) {
if (activityData.data[j]["matter"] !== null) {
if (matterData.data[i].id === activityData.data[j]["matter"].id) {
matters_array.push(activityData.data[j]);
}
if (matters_array.length > 0) matterData.data[i]["activities"] = matters_array;
}
}
}
每个实施都需要更多时间来执行。
ActivitiesData 将有一个 id 以及与 matterData.id 相关的 matter.id
任何见解,请帮助
事项数据
var matterData= {
"data": [
{
"id": 1055395769,
"description": "Peters",
"status": "Pending",
"location": null,
"client_reference": "1532",
"billable": true,
"billing_method": "hourly",
"open_date": "2019-06-05",
"close_date": null,
}
]
};
活动数据
var activityData = {
"data": [
{
"id":285568423,
"type": "ExpenseEntry",
"date": "2011-01-01",
"quantity_in_hours": 1,
"rounded_quantity_in_hours": 1,
"quantity": 1,
"rounded_quantity": 1,
"price": 100,
"matter": {
"id": 1055395769
}
},
{
"id": 285568428,
"type": "MonEntry",
"matter": {
"id": 1055395769
}
},
{
"id": 285568442,
"type": "EEntry",
"matter": {
"id": 1055395769
}}]
};
解决方案
首先创建一个包含 id 作为键和 matte.data 作为值的映射,并为 acitvity 创建一个空数组,然后遍历活动并将活动推送到空数组中
const map = {}
for( var i in matterData.data){
map[matterData.data[i].id] = matterData.data[i];
matterData.data[i].activities = [];
}
for(var i in activityData.data){
var matter = map[activityData.data[i].matter.id];
matter.activities.push(activityData.data[i]);
}
for( var i in matterData.data){
console.log(matterData.data[i]);
}
此解决方案仅在 matterData.data[i].id 唯一时才有效
推荐阅读
- javascript - 反应
- intellij-idea - 在 Tomcat 服务器中看不到应用程序服务器
- powerbi - Power BI 的 Mapbox 视觉对象 - 不支持视觉对象并将被弃用
- c++ - return 语句中的嵌套函数调用会导致 stack-use-after-scope 错误吗?
- weka - 使用嵌入的 WEKA 分类
- c# - 如果条件不满足,则“短路”YARP RequestTransform 并返回自定义响应
- django - 在 Django 应用程序中使用 IP 地址查看计数器
- c++ - 如何使用 Cmakelists 将外部库添加到我的 C++ 项目中?
- javascript - 将数组项映射/链接到另一个对象的键
- visual-c++ - 将智能指针定义为类的成员变量