Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Arrays 从具有大数据集(50k记录)的对象数组中检索对象的最快方法_Arrays_Object_Search_Find_Underscore.js - Fatal编程技术网

Arrays 从具有大数据集(50k记录)的对象数组中检索对象的最快方法

Arrays 从具有大数据集(50k记录)的对象数组中检索对象的最快方法,arrays,object,search,find,underscore.js,Arrays,Object,Search,Find,Underscore.js,这里totalObjects包含大约40k条记录,我正从中定义sapObjs中存在的一个对象(20k条记录)。所以,当我找到这个对象时,我试图改变它的属性值。这个操作需要200多秒。有人能告诉我克服这个问题和提高性能的方法吗。我已经尝试了u.find的其他方法,比如过滤器和其他数组函数,但是我得到了下划线js,它给出的结果比那些更快。但据说下划线速度较慢,我需要其他方法来实现这一点,所以任何人都可以帮我解决这个问题 for (i = 0,sapLength = sapObjs.l

这里totalObjects包含大约40k条记录,我正从中定义sapObjs中存在的一个对象(20k条记录)。所以,当我找到这个对象时,我试图改变它的属性值。这个操作需要200多秒。有人能告诉我克服这个问题和提高性能的方法吗。我已经尝试了u.find的其他方法,比如过滤器和其他数组函数,但是我得到了下划线js,它给出的结果比那些更快。但据说下划线速度较慢,我需要其他方法来实现这一点,所以任何人都可以帮我解决这个问题

        for (i = 0,sapLength = sapObjs.length;i < sapLength; i++) {
            debugger;


            currRecord = entriesInserted[sapObjs[i].name];
            if (currRecord) {

                dummyObj = _.find(totalObjects,{name:sapObjs[i].name});

                dummyObj["sap_desc"] = sapObjs[i].sap_desc;
                dummyObj.source = "";

            }
            else {
                entriesInserted[sapObjs[i].name] = sapOpbs[i];

                totalObjects.push(sapObjs[i]);

            }
        }
for(i=0,sapLength=sapObjs.length;i
创建查找哈希。这是我拼凑的一个粗略的页面来说明。使用u.find,测试花费了400多秒。使用查找哈希,大约需要40毫秒。几乎是瞬间的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="//code.jquery.com/jquery-2.2.0.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

    <script type="text/javascript">

        // using globals so this can be run in separate steps.
        var source_sapObjs = [];
        var source_totalObjects = [];

        function createArrays(){
            jQuery.ajax({
                url: 'https://raw.githubusercontent.com/dwyl/english-words/master/words.txt',
                dataType: 'text',
                type: 'GET'
            }).done(function(textFile){

                var words = textFile.split('\n');

                // create an array with 20k and 40k records.
                for(var i = 0; i < 20000; i++){
                    source_sapObjs.push({name: words[i], sap_desc: 'DESC-' + words[i]});
                }
                for(var j = 0; j < 40000; j++){
                    source_totalObjects.push({name: words[j], sap_desc: 'none'});
                }

                console.log("source_sapObjs.length:", source_sapObjs.length);
                console.log("source_totalObjects.length:", source_totalObjects.length);
                console.log("finished creating arrays");
            });
        }

        function iter_arrays(){
            var dummyObj = null;
            var sapObjs = source_sapObjs.slice(); // create a copy so I can re-run this multiple times.
            var totalObjects = source_totalObjects.slice(); // create a copy so I can re-run this multiple times.


            var start = new Date().getTime();

            var totalObjectsHash = {};
            for(var k = 0; k < totalObjects.length; k++){
                totalObjectsHash[totalObjects[k].name] = totalObjects[k];
            }

            for (var i = 0, sapLength = sapObjs.length; i < sapLength; i++) {
                    //dummyObj = _.find(totalObjects,{name:sapObjs[i].name});
                    dummyObj = totalObjectsHash[sapObjs[i].name];
                    dummyObj["sap_desc"] = sapObjs[i].sap_desc;
                    dummyObj.source = "";
            }

            var end = new Date().getTime();
            var time = end - start;
            console.log('Execution time: ' + time);
            console.log(_.map(totalObjects, 'sap_desc'));

        }

    </script>

</head>
<body>
</body>
</html>

标题
//使用globals以便可以在单独的步骤中运行。
var source_sapObjs=[];
var source_totalObjects=[];
函数createArrays(){
jQuery.ajax({
网址:'https://raw.githubusercontent.com/dwyl/english-words/master/words.txt',
数据类型:“文本”,
键入:“获取”
}).done(函数(文本文件){
var words=textFile.split('\n');
//创建一个包含20k和40k条记录的数组。
对于(变量i=0;i<20000;i++){
source_sapObjs.push({name:words[i],sap_desc:'desc-'+words[i]});
}
对于(var j=0;j<40000;j++){
push({name:words[j],sap_desc:'none'});
}
log(“source_sapObjs.length:”,source_sapObjs.length);
log(“source\u totalObjects.length:”,source\u totalObjects.length);
log(“已完成创建数组”);
});
}
功能iter_阵列(){
var dummomobj=null;
var sapObjs=source_sapObjs.slice();//创建一个副本,以便我可以多次重新运行它。
var totalObjects=source_totalObjects.slice();//创建一个副本,以便我可以多次重新运行它。
var start=new Date().getTime();
var totalObjectsHash={};
对于(var k=0;k
要运行它,请在计算机上本地创建页面,在chrome中打开它,打开开发工具,然后从控制台运行第一个功能。完成后,运行第二个函数