JavaScript-2个数组循环赋值的 效率问题
问题1
var useObj = {};
useObj .key1 = "a"
useObj .key2 = "b"
useObj .key3 = "x"
useObj .value1="kk"
useObj .value2="jj"
useObj .value3="cc"
useObj .value4="dd"
useObj .value5="dd"
useObj .value6="dd"
useObj .value7="dd"
var array1=[] // array1中有700个 useObj
var array2=[] // array2中有12000个 useObj
上面array1是array2的子集,不过里面的value值都更新过
要把array1中3个key值同时等于array2 的值付给array2,有什么好的方法?
for(var i = 0; i < array1.length; i++) {
for(var j= 0; j< array2.length; j++) {
if (array1[i].key1 == array2[j].key1 && array1[i].key2== array2[j].key2 && array1[i].key3 == array2[j].key3) {
array2[j] = array1[i]
break;
}
}
}
用上面一般的2重循环赋值,页面上会产生下面的提示
以上代码只是语法描述。
IE提示对话框 “是否停止运行此脚本?此页面上的脚本造成Internet Explore运行速度减慢。如果继续运行,您的计算机将可能停止响应。”
怎么能提高效率,避免产生上面的对话框?也可以使用jquery来解决
当然是越快越好,避免弹出这个对话框。
顺便问下 一般上面IE提示对话框产生的原因是 js代码执行时间过长,还是js代码执行太占内存,或者js代码执行的行数超过一定的限制才产生上面的对话框?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
<!DOCTYPE html>
<html>
<script type="text/javascript">
var WinJS = {
update: function (a, b){
var o1 = WinJS.getKeys(a),
o2 = WinJS.getKeys(b),
k, i=0;
for(var k in o1){
if (k in o2) {
b[o2[k]] = a[o1[k]];
i++;
}
}
alert('操作完毕, 共更新' + i + '个');
},
getKeys: function (arr){
var x = arr.length, oA = {}, o;
while(x--){
o = arr[x];
oA[o.key1 + o.key2 + o.key3] = x;
}
return oA;
}
};
// 模拟数据
var array2, array1;
array2= [
{key1: 'a',key2: 'b',key3: '1'},
{key1: 'a',key2: 'b',key3: '2'},
{key1: 'a',key2: 'b',key3: '3'},
{key1: 'a',key2: 'b',key3: '4'},
{key1: 'a',key2: 'b',key3: '5'},
{key1: 'a',key2: 'b',key3: '6'},
{key1: 'a',key2: 'b',key3: '7'},
{key1: 'a',key2: 'b',key3: '8'},
{key1: 'a',key2: 'b',key3: '9'},
{key1: 'a',key2: 'b',key3: '10'},
{key1: 'a',key2: 'b',key3: '11'}
];
//模拟子集
array1 = array2.slice(2,5);
//更新
WinJS.update(array1, array2);
</script>
</html>
因为是用key合成索引,所以可以试一下用哈希的方式 ,
如果数据量实现太多, 也可以尝试添加定时器来异步执行