- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,我有两组数组对象,我只需要选择 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/
在下面的代码中,我想不必添加undefined作为filteredDevice的类型注解。我认为一个被过滤的设备不应该是未定义的,因为我过滤掉了未定义的设备。 但是如果我删除 undefined类型注
我有一个 UIButton,其文本来自服务器。按钮的宽度是固定的。我想要的是,如果按钮的文本超过按钮的宽度,文本应该在按钮内选取框。如果文本适合按钮宽度,则不应有选取框效果。 我点击了一些链接(one
我正在从头开始实现 webgl 选取,并决定走 GLSL 路线,而不是光线相交测试。 所以我将整个场景渲染到一个单独的帧缓冲区中,为每个对象分配一个唯一的颜色,该颜色作为统一变量传递给片段着色器。当场
例如,我有包含多个对象的数组, var arr = ["a", "b", "c", "d"]; 我想要的是从该数组中选取 2 个随机对象,例如“a”和“c”,并将这 2 个对象推送到另一个数组中,例如
我是一名优秀的程序员,十分优秀!