首页 > 解决方案 > 优化javascript中的嵌套for循环和if语句

问题描述

我的 javascript 代码中的两个嵌套 for 循环中有一个 if 语句,如下所示。

问题是当我必须比较数组中的数千个对象时,执行速度会减慢,因为循环遍历整个数组只是为了检查单个匹配值。

当数据对象中的键与数组中对象的 id 匹配时,arr它会向数组中的对象添加用户名键arr

请运行以下代码并查看输出:

var data = { 1: 'John',
  2: 'Josehp',
  8: 'Marley',
  3: 'George',
  4: 'Stella',
  5: 'Stanley',
  123: 'Juhi'
}



var arr = [ { id: '1'
   },
  { id: '2'
  },
  { id: '10'
    },
  { id: '3'
    },
  { id: '4'
    },
  { id: '13'
    },
  { id: '5'
    }
];

var x;
for (x in data) {
	for (i = 0; i < arr.length; i++) {
	if (arr[i].id == x) {
	arr[i].username = data[x];
	}
     }
  }
console.log(arr)

如何优化此代码以避免嵌套循环或简单地提高性能?

标签: javascriptarraysnode.jsloopsobject

解决方案


您可以进行一个循环并检查对象是否存在并更新数组。

var data = { 1: 'John', 2: 'Josehp', 8: 'Marley', 3: 'George', 4: 'Stella', 5: 'Stanley', 123: 'Juhi' },
    array = [ { id: '1' }, { id: '2' }, { id: '10' }, { id: '3' }, { id: '4' }, { id: '13' }, { id: '5' }],
    i;

for (i = 0; i < array.length; i++) {
    if (array[i].id in data) {
        array[i].username = data[array[i].id];
    }
}

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读