在JavaScript中过滤字符串数组的最快方法

时间:2016-06-14 14:21:41

标签: javascript arrays performance

我正在使用存储在S3上的一些xml文件。我使用Node中的xml2js模块来解析xmls,然后我提取其中包含.jpg的字符串。我正在使用过滤器方法,然后尝试使用我自己的for循环,但这并没有任何时间关闭。有没有更快的方法来编写代码的这一部分,或者这是完成它的最快方法。任何帮助表示赞赏。

使用过滤方法:

//this took 52393ms
var file = JSON.stringify(data);
var arrayOfStrings = file.split('"');
var images = arrayOfStrings.filter(function(str) {
    return str.indexOf('.jpg') !== -1;
});
resolve(images);

使用for循环:

//this took 52681ms
var file = JSON.stringify(data);
var arrayOfStrings = file.split('"');
var images =[];
for(let i = 0; i < arrayOfStrings.length; i++) {
    if(arrayOfStrings[i].indexOf('.jpg') !== -1) {
        images.push(arrayOfStrings[i]);
    }
}
resolve(images);
使用file.split后,

数据如下所示(&#39;&#34;&#39;);

[ '{','rstuv',':{','options',':[{','![alt](CKrgUgiYMflaWnsGZ009.jpg)']];

1 个答案:

答案 0 :(得分:5)

var file = JSON.stringify(data);
var arrayOfStrings = file.split('"');

不要那样做。如果要搜索数据,请保持结构化。字符串化然后搜索该字符串不仅会给你带来一堆错误(当字符串确实包含引号时),许多数组元素甚至不是正确的字符串,并且几乎没有任何改进,只需将原始XML文件作为文本读取并直接搜索。

相反,只需通过data对象进行迭代(或在必要时递归)(详情请参阅Access / process (nested) objects, arrays or JSON),并在您希望它们的那些位置过滤字符串(和属性名称?) 。这会快得多。