如何将这段JavaScript for循环代码转换为ES6/ES7写法?
如何将这段for循环转换为ES6/ES7写法?
你的代码核心逻辑是:过滤csiList,只保留那些appId未出现在this.tableData的csiId中的项。下面是两种更简洁的ES6+写法:
方法一:用Array.some()替代for循环
some()方法会遍历数组直到找到符合条件的元素,和原for循环的逻辑完全一致,代码更简洁:
const filteredData = csiList.filter(item => !this.tableData.some(tableItem => tableItem.csiId === item.appId) );
逻辑说明:this.tableData.some(...)会检查是否存在csiId等于当前item.appId的项,取反后就实现了原代码“存在匹配则过滤掉,否则保留”的效果。
方法二:用Set提升性能(适合大数据量场景)
如果this.tableData的数据量较大,每次过滤都遍历数组会比较低效。可以先把所有csiId存入Set,利用Set的O(1)查找特性优化性能:
// 先提取所有已存在的csiId到Set中 const existingCsiIds = new Set(this.tableData.map(item => item.csiId)); // 快速过滤csiList const filteredData = csiList.filter(item => !existingCsiIds.has(item.appId));
这种方式只需要遍历this.tableData一次,后续的过滤操作会快很多。
内容的提问来源于stack exchange,提问作者Mitul Panchal
相关产品推荐
相关产品推荐

