Javascript 检查链接在angularjs中是否有https://

Javascript 检查链接在angularjs中是否有https://,javascript,html,angularjs,json,Javascript,Html,Angularjs,Json,我的angular应用程序中有大量JSON格式的数据 [ {"link": "https://stackoverflow.com"}, {"link": "https://stackoverflow.com"}, {"link": "id-aW783D"}, //This is a wrong data {"link": "https://stackoverflow.com"} ] 但正如您在JSON中看到的,第三个对象有一个无效值(不是链接) 现在我需要用a绑定这些链接,但是

我的angular应用程序中有大量JSON格式的数据

[
  {"link": "https://stackoverflow.com"},
  {"link": "https://stackoverflow.com"},
  {"link": "id-aW783D"}, //This is a wrong data
  {"link": "https://stackoverflow.com"}
]
但正如您在JSON中看到的,第三个对象有一个无效值(不是链接)

现在我需要用
a
绑定这些链接,但是
{“link”:“id-aW783D”}
a
中无效,因为它不是有效的URL

我添加这段代码是为了避免无效链接,但有了这段代码和大量数据,应用程序需要花费大量时间来加载

for(i; i < $scope.data.length; i++){
 item = $scope.data[i];
 if (item.link.indexOf("https://")){
   item.ID = item.link;
 }
 else item.ID = '';
}

  • {{j.link}

使用:
ng show=“j.ID.indexOf('https')==0”
Js速度相当快。Ng if的速度要慢得多。以及呈现html标记

例如,为100万个对象运行“for”:

var start = new Date();
for(i = 0; i < 1000000; i++){
 item = {link: '123321https://'};
 if (item.link.indexOf("https://")){
   item.ID = item.link;
 }
 else item.ID = '';
}
console.log(new Date() - start)
var start=newdate();
对于(i=0;i<1000000;i++){
item={link:'123321https://'};
if(item.link.indexOf(“https://”){
item.ID=item.link;
}
else item.ID='';
}
console.log(新日期()-start)
在我的chrome浏览器中使用139ms

我怀疑我的电脑能在有1kk链接的页面上生存下来


实际上,您需要的是虚拟/无限滚动。

如果您想针对更大数量的数据进行优化,您不想将过滤逻辑卸载到模板中。你可以尝试不同的逻辑,比如

var data_to_render = $scope.data.filter(function(item) {
    return item.link.indexOf("https://") === 0;
})
这将返回一个新数组,因为javascript中的变异可能代价高昂,并且避免将
变量指定X次


除此之外,如果只是显示一个数据列表,可能需要尽可能限制显示的元素数量。过滤一个数组中的数十万项并不是一个真正的问题,一次渲染它们会降低大多数设备的速度。

您可以使用
过滤器
!上面的例子速度很快,但在我的例子中不是这样,我有大规模的嵌套json数据,也许我需要添加服务器端分页,谢谢您的回复。:)关键是,在进行一些非常繁重的计算之前,任何js函数的处理结果都会比呈现标记快得多。所以thin point渲染的不是JS。