javascript - 优化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)
如何优化此代码以避免嵌套循环或简单地提高性能?
解决方案
您可以进行一个循环并检查对象是否存在并更新数组。
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; }
推荐阅读
- c# - awaiting AcceptTcpClientAsync() breaks out of while loop
- reactjs - 使用打字稿动态渲染组件
- fonts - CFF2:混合的参数数量值不正确
- c# - 我如何获取此方法的页码或值
- java - 这个函数的数组列表时间复杂度?
- javascript - 如何从 chrome 扩展上的 otpions 页面获取和保存值并将它们传递给 background.js
- ui-automation - UIAutomation:混合 ProviderFragmentRoot 和 ProviderSimple
- mouseevent - 滑动下一个/上一个箭头跟随鼠标+拖动工作
- javascript - 希望使用 div 来显示信息,而不是链接到页面
- actions-on-google - 有时,Action 会离开对话,而是返回用户查询的 google 搜索