相关疑难解决方法(0)

如何在巨大的数据集(angular.js)上提高ngRepeat的性能?

我有一个数千行的庞大数据集,每行约10个字段,大约2MB的数据.我需要在浏览器中显示它.最简单的方法(获取数据,将其放入$scope,让它ng-repeat=""完成它的工作)工作正常,但它开始将浏览器的节点插入DOM时冻结大约半分钟.我该如何处理这个问题?

一种选择是逐行追加行$scope并等待ngRepeat完成将一个块插入DOM,然后再移动到下一个.但AFAIK ngRepeat在完成"重复"时不报告,所以它会变得丑陋.

其他选择是将服务器上的数据拆分成页面并在多个请求中获取它们,但这甚至更加丑陋.

我浏览了Angular文档以寻找类似的东西ng-repeat="data in dataset" ng-repeat-steps="500",却一无所获.我对Angular方式相当新,所以我可能完全忽略了这一点.这方面的最佳做法是什么?

javascript angularjs angularjs-ng-repeat

166
推荐指数
9
解决办法
13万
查看次数

从ND到1D阵列

说我有一个数组a:

a = np.array([[1,2,3], [4,5,6]])

array([[1, 2, 3],
       [4, 5, 6]])
Run Code Online (Sandbox Code Playgroud)

我想将其转换为1D数组(即列向量):

b = np.reshape(a, (1,np.product(a.shape)))
Run Code Online (Sandbox Code Playgroud)

但这会回来

array([[1, 2, 3, 4, 5, 6]])
Run Code Online (Sandbox Code Playgroud)

这与以下不一样:

array([1, 2, 3, 4, 5, 6])
Run Code Online (Sandbox Code Playgroud)

我可以将此数组的第一个元素手动转换为1D数组:

b = np.reshape(a, (1,np.product(a.shape)))[0]
Run Code Online (Sandbox Code Playgroud)

但是这需要我知道原始数组有多少维度(并且在处理更高维度时连接[0])

是否存在从任意ndarray获取列/行向量的独立于维度的方法?

python numpy

115
推荐指数
4
解决办法
24万
查看次数

将数组拆分为N长度的块

如何将一个数组(有10个项目)拆分为4个包含最多n项目的块.

var a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
//a function splits it to four arrays.
console.log(b, c, d, e);
Run Code Online (Sandbox Code Playgroud)

它打印:

['a', 'b', 'c']
['d', 'e', 'f']
['j', 'h', 'i']
['j']
Run Code Online (Sandbox Code Playgroud)

n = 3但是,上述假定值应该是动态的.

谢谢

javascript arrays

83
推荐指数
2
解决办法
9万
查看次数

使用Underscore.js以块的形式拆分JavaScript数组

我需要将JavaScript数组拆分为n大小的块.

例如:给定这个数组

["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"]
Run Code Online (Sandbox Code Playgroud)

和a n等于4,输出应为:

[ ["a1", "a2", "a3", "a4"],
  ["a5", "a6", "a7", "a8"],
  ["a9", "a10", "a11", "a12"],
  ["a13"]
]
Run Code Online (Sandbox Code Playgroud)

我知道这个问题的纯JavaScript 解决方案,但由于我已经在使用Underscore.js,我想知道下划线是否为此提供了更好的解决方案.

编辑:

我创建了一个jsPerf测试来检查下划线解决方案的速度有多慢.

javascript split functional-programming underscore.js lodash

78
推荐指数
4
解决办法
5万
查看次数

如何使用JavaScript将长数组拆分为更小的数组

我有一系列的电子邮件(它可能只是一封电子邮件,或100封电子邮件),我需要发送带有ajax请求的数组(我知道该怎么做),但我只能发送一个包含10个或更少的电子邮件.因此,如果有一个包含20个电子邮件的原始数组,我需要将它们分成2个数组,每个10个.或者如果原始数组中有15个电子邮件,那么1个数组为10,另一个数组为5.我正在使用jQuery,最好的方法是什么?

javascript arrays jquery loops

70
推荐指数
9
解决办法
14万
查看次数

将JS数组拆分为N个数组

想象一下,我有一个像这样的JS数组:

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
Run Code Online (Sandbox Code Playgroud)

我想要的是将该数组拆分为N个较小的数组.例如:

split_list_in_n(a, 2)
[[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11]]

For N = 3:
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11]]

For N = 4:
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11]]

For N = 5:
[[1, 2, 3], [4, 5], [6, 7], [8, 9], [10, 11]]
Run Code Online (Sandbox Code Playgroud)

对于Python,我有这个:

def split_list_in_n(l, cols):
    """ Split …
Run Code Online (Sandbox Code Playgroud)

javascript arrays

70
推荐指数
8
解决办法
5万
查看次数

如何在JavaScript中将数组拆分为数组对?

我想将数组拆分成数组对

所以 var arr=[2,3,4,5,6,4,3,5,5]

将会 newarr =[[2,3],[4,5],[6,4],[3,5],[5]]

javascript arrays

28
推荐指数
5
解决办法
2万
查看次数

在IndexedDB的objectstore阻止UI中插入大量数据

我想在我的IndexedDB的objectstore中保存约35000个对象.我使用下面的代码插入.

AddListings = function (x2j_list_new, callback) {   
    var transaction = db.transaction(["listings"], IDBTransaction.READ_WRITE);
    var count = 0;
    transaction.oncomplete = function (event) {
        if (callback) {
            console.log('x2jShowListing Added ' + count + '/' + x2j_list_new.length);
                callback([count, x2j_list_new.length]);
            }
    };
    transaction.onerror = function (e) {
       console.log("myError: ", e);  
       if (callback) {
          callback(false);
       }
    };
    var store = transaction.objectStore("listings");

    $.each(x2j_list_new, function (index0, item0) {
        var request = store.put(item0);
        request.onsuccess = function (event) {
            count++;
            // event.target.result  
            };
        });
    });        
};
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,但循环和插入约35000个对象使UI无响应约200秒.我想也许我可以使用WebWorkers,但是WebWorkers中没有IndexedDB.我试图找到批量插入的方法,找不到一个.有关如何在不阻止UI的情况下插入大量对象的任何想法?

javascript google-chrome-extension indexeddb

19
推荐指数
1
解决办法
1万
查看次数

在JavaScript中进行分区

请考虑一个数组,如:

arrayAll = [1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)

是否有一个允许进行分区以获取的包:

arrayALLPartionned = [[1,2,3],[4,5,6],[7,8,9]]
Run Code Online (Sandbox Code Playgroud)

我可以看到如何使用for循环执行此操作,但如果存在,则会欣赏"预制"功能.

javascript list

13
推荐指数
4
解决办法
2万
查看次数

将JavaScript字符串拆分为固定长度的片段

我想将一个字符串拆分成固定长度(例如N).当然,如果原始字符串的长度不是N的倍数,则最后一块可能更短.

我需要最快的方法来完成它,但也是最简单的方法.我一直这样做的方式如下:

var a = 'aaaabbbbccccee';
var b = [];
for(var i = 4; i < a.length; i += 4){ // length 4, for example
    b.push(a.slice(i-4, i));
}
b.push(a.slice(a.length - (4 - a.length % 4))); // last fragment
Run Code Online (Sandbox Code Playgroud)

我认为必须有更好的方法来做我想要的.但我不想要额外的模块或库,只要简单的JavaScript就可以.

在问之前,我已经看到了一些使用其他语言解决此问题的解决方案,但它们并未考虑JavaScript而设计.

javascript html5 node.js

11
推荐指数
2
解决办法
1万
查看次数