花更多的时间使用javascript函数获取json对象中的记录

时间:2015-08-06 12:51:42

标签: javascript jquery json

我有20000条记录,低于javascript函数需要更多时间来获取Json对象中的记录。

 $("#txtKey").keyup(function() {
            var value = $("#txtKey").val();
            var exactMatch = $('#exactMatch').is(':checked');
            var key = $("#SearchKey option:selected").val();           
            var filteredData = vLookup(value, data, key, exactMatch);            
            fillTableDataDynamic(filteredData);
        });

  function vLookup(value, data, key, exactMatch) {            
        if (typeof data === "object" && !(data instanceof Array)) {
            var arrData = [];
            arrData.push(data);
            data = arrData;
        }
        var filteredData = [];
        var transValue = value.toLowerCase();

        for (var i = 0; i < data.length; i++) {
            if (exactMatch) {
                if (JSON.stringify(data[i][key]).indexOf(value) > -1) {
                    filteredData.push(data[i]);
                }
            } else {
                if (JSON.stringify(data[i][key]).toLowerCase().indexOf(transValue) > -1) {
                    filteredData.push(data[i]);
                }
            }
        }
        return filteredData;
    }

获取记录的其他方法是什么?

谢谢你。

1 个答案:

答案 0 :(得分:0)

从数据的外观

        if (exactMatch) {
            if (data[i][key].toString().indexOf(value) > -1) {
                filteredData.push(data[i]);
            }
        } else {
            if (data[i][key].toString().toLowerCase().indexOf(transValue) > -1) {
                filteredData.push(data[i]);
            }
        }

将为您效劳

所以 - 没有速度差异

试试这个:使用Array.prototype.filter - 函数调用中有额外的开销,但filter函数可能会提高速度

function vLookup(value, data, key, exactMatch) {            
    if (typeof data === "object" && !(data instanceof Array)) {
        var arrData = [];
        arrData.push(data);
        data = arrData;
    }

    var transValue = value.toLowerCase();

    if (exactMatch) {
        return data.filter(function(datum) {
            return datum[key].toString().indexOf(value) > 1;
        });
    } else {
        return data.filter(function(datum) {
            return datum[key].toString().indexOf(transValue) > 1;
        });
    }
}