对于像这样的结构
var arr = [];
arr[0] = {};
arr[0].p1 = [];
arr[0].p1[0] = 'hola arr0 p1';
arr[0].p2 = [];
arr[0].p2[0] = 'hola arr0 p2';
arr[1] = {};
arr[1].p1 = [];
arr[1].p1[0] = 'hola arr1 p1';
arr[1].p2 = [];
arr[1].p2[0] = 'hola arr1 p2';
arr[2] = {};
arr[2].p1 = [];
arr[2].p1[0] = 'hola arr2 p1';
arr[2].p3 = [];
arr[2].p3[0] = 'hola arr2 p3';
arr[3] = {};
arr[3].p2 = [];
arr[3].p2[0] = 'hola arr3 p2';
arr[3].p3 = [];
arr[3].p3[0] = 'hola arr3 p3';
arr[4] = {};
arr[4].p1 = [];
arr[4].p1[0] = 'hola arr4 p1';
arr[4].p4 = [];
arr[4].p4[0] = 'hola arr4 p4';
我想合并对象,以便最后我将所有信息压缩在一个对象中。 此代码有效:
for (let a=1;a<arr.length; a++){
for (let i in arr[0]) {
for (let j in arr[a]) {
if (i === j) {
arr[0][i][a] = arr[a][j][0];
delete arr[a][j];
}
}
}
for (let j in arr[a]) {
arr[0][j] = [];
arr[0][j][a] = arr[a][j][0];
delete arr[a][j];
}
}
console.log(arr)
我得到了我想要的输出。
https://jsfiddle.net/jb73tur4/
问题在于,在我的实际代码中,arr [0]有1500个密钥,而arr [1]有1300个密钥。通过这两种方式循环意味着1500x1300次迭代,冻结了浏览器。
有没有办法做到这一点?以某种方式加速这个?
答案 0 :(得分:0)
如果您预计会进行多次迭代,请查看Web Worker API(https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers),这将允许您在后台运行计算并防止页面冻结。
答案 1 :(得分:0)
通过利用对象 - 代替数组特征,这需要更少的迭代次数
https://jsfiddle.net/jb73tur4/2/
for (var a = 1; a < arr.length; a++) {
for (let p in arr[a]) {
if (arr[0][p]) {
arr[0][p][a] = arr[a][p][0];
delete arr[a][p];
}
}
let new_str = {};
for (let p in arr[a]) {
new_str[p] = [];
new_str[p][a] = arr[a][p][0];
}
Object.assign(arr[0], new_str);
delete arr[a];
}
console.log(arr)