Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中优化此过滤?_Javascript_Optimization - Fatal编程技术网

如何在javascript中优化此过滤?

如何在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"} } 首先

我有一个来自json文件的大对象(在下面的代码中称为“container”)。此对象包含许多元素(约20000),每个元素都是具有“rank”属性的对象。它太大,无法在此处打印,但这里有一个具有相同结构的对象:

{
    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]