JavaScript-2个数组循环赋值的 效率问题

WordPress 开发 WordPress 开发 主题:1098 回复:2322

JavaScript-2个数组循环赋值的 效率问题

归属感 发布于 2016-11-17 字数 1380 浏览 1020 回复 1

问题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代码执行的行数超过一定的限制才产生上面的对话框?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(1

清晨说ぺ晚安 2017-09-01 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合成索引,所以可以试一下用哈希的方式 ,
如果数据量实现太多, 也可以尝试添加定时器来异步执行