如何在javascript中优化此过滤?
我有一个来自json文件的大对象(在下面的代码中称为“container”)。此对象包含许多元素(约20000),每个元素都是具有“rank”属性的对象。它太大,无法在此处打印,但这里有一个具有相同结构的对象:如何在javascript中优化此过滤?,javascript,optimization,Javascript,Optimization,我有一个来自json文件的大对象(在下面的代码中称为“container”)。此对象包含许多元素(约20000),每个元素都是具有“rank”属性的对象。它太大,无法在此处打印,但这里有一个具有相同结构的对象: { guy1: {rank:0, infos:"the first guy ever"}, guy0: {rank:2, infos:"another guy"}, something: {rank:1, infos:"something else"} } 首先
{
guy1: {rank:0, infos:"the first guy ever"},
guy0: {rank:2, infos:"another guy"},
something: {rank:1, infos:"something else"}
}
首先,我想把其中排名最低的10个放在一个列表中(在我用一个函数稍微修改了它们之后,我在这里调用modify),所以我做了:
var res = [];
for (var key in container) {
if (container.hasOwnProperty(key) && container[key]["rank"]<10) {
res.push(modify(container[key]));
}
}
var res=[];
for(容器中的var键){
if(container.hasOwnProperty(key)&&container[key][“rank”]最后,我用这个:
var filt_cont = []
for (var key in container) {
filt_cont[container[key]["rank"]] = container[key]
}
filt_cont = filt_cont.filter(my_test)
return filt_cont[0:9]
工作速度足够快,显然创建这样一个列表,按索引添加项目并不太昂贵
我注意到,如果未定义将通过我的_测试,这可能是一个问题,但事实并非如此。对象包含许多元素(约20000),嗯,它是一个数组吗?还是仅用于此用途的错误数据结构?不,它是一个从json字典解释的对象(未排序),我将添加一个小示例来说明它的外观,这样会更清晰&&
。这是不必要的,而且需要一些时间。如果您经常按秩查询容器,那么您真的应该使用一个数组,其中项目按秩而不是对象进行排序。然后编写一个快速函数来获取前10个项目是很简单的。不要对代码进行微优化,优化数据结构和算法。它在grea中工作一开始我害怕构建这个数组需要很长时间(我把它看作是一个二次运算),但实际上它是线性的。
var filt_cont = []
for (var key in container) {
filt_cont[container[key]["rank"]] = container[key]
}
filt_cont = filt_cont.filter(my_test)
return filt_cont[0:9]