gpt4 book ai didi

javascript - 如何在 javascript 中使用两个数组列表提高比较和选取对象的性能

转载 作者:行者123 更新时间:2023-12-03 04:12:18 24 4
gpt4 key购买 nike

嗨,我有两组数组对象,我只需要选择 mrp 较高的对象在更新的列表中。我可以使用 lodash map 和查找功能获取结果。 10 到 15 k 条记录需要更多时间。有没有办法提高性能。这是我的代码。

var ExisitingData=[{"isActive" : true, 
"barcode" : "8908001921015",
"mrp" : 2000,
},
{"isActive" : true,
"barcode" : "8908001921015",
"mrp" : 1000,
}
....15k]


var updatedData=[{"isActive" : true,
"barcode" : "8908001921015",
"mrp" : 4000,
},
{"isActive" : true,
"barcode" : "8908001921015",
"mrp" : 1000,
}
....15k]

var newData=[]
_.map(result1, function (item) {
var updateRecord = _.find(data3, {'barcode': item['barcode']});
if (updateRecord) {
if (item['mrp'] > updateRecord['mrp']) {
newData.push(item);

}
}
});

最佳答案

您可以使用纯 JavaScript 高效地完成此操作,并且不需要更多代码。我建议使用 ES6 Map 通过条形码来键入 updatedData,这样您就可以快速查找 existingData 中的每个条形码。在这里,我将该 Map 作为 this 对象提供给 filter:

let newData = existingData.filter(function (o) {
return o.mrp > this.get(o.barcode);
}, new Map(updatedData.map( o => [o.barcode, o.mrp] )) );

const existingData = [{
"isActive" : true,
"barcode" : "8908001921015",
"mrp" : 2000,
}, {
"isActive" : true,
"barcode" : "2699001592228",
"mrp" : 1000,
}];

const updatedData = [{
"isActive" : true,
"barcode" : "2699001592228",
"mrp" : 4000,
}, {
"isActive" : true,
"barcode" : "8908001921015",
"mrp" : 1000,
}];

let newData = existingData.filter(function (o) {
return o.mrp > this.get(o.barcode);
}, new Map(updatedData.map( o => [o.barcode, o.mrp] )) );

console.log(newData);

因此,这会迭代第二个列表一次(为了创建映射),并迭代第一个列表一次(为了过滤它)。 Map#get 方法以恒定时间运行,因此此代码运行时间为 O(n+m),其中 n m是两个数组的大小。

关于javascript - 如何在 javascript 中使用两个数组列表提高比较和选取对象的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44270114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com