Javascript 过滤前抛出异常?

Javascript 过滤前抛出异常?,javascript,node.js,Javascript,Node.js,在筛选项目之前,它将检查项目中是否存在removeId,否则将引发异常。有没有办法避免出现两个循环?由于有两个循环,这段代码可能写得不好 const项=[ {“Id”:111}, {“Id”:111}, {“Id”:222}, {“Id”:222}, {“Id”:333}, {“Id”:333}, ] const removeId=222; const find=items.some(item=>item.Id==removeId); 如果(!查找){ 抛出新错误(`Id未找到:${remov

在筛选
项目之前,它将检查
项目中是否存在
removeId
,否则将引发异常。有没有办法避免出现两个循环?由于有两个循环,这段代码可能写得不好

const项=[
{“Id”:111},
{“Id”:111},
{“Id”:222},
{“Id”:222},
{“Id”:333},
{“Id”:333},
]
const removeId=222;
const find=items.some(item=>item.Id==removeId);
如果(!查找){
抛出新错误(`Id未找到:${removeId}`);
}
常量filteredItems=items.filter(item=>item.Id!==removeId);

console.log(filteredItems)如果您的目的是立即抛出错误以避免
过滤器
部分,则无论如何都必须遍历数组。因此,您无法避免至少对数组进行一次迭代。您可以检查过滤后的数组和原始数组的长度是否相同,以查看是否需要抛出异常并同时进行过滤

const项=[
{“Id”:111},
{“Id”:111},
{“Id”:222},
{“Id”:222},
{“Id”:333},
{“Id”:333}
];
const removeId=222;
常量filteredItems=items.filter(item=>item.Id!==removeId);
if(filteredItems.length==items.length){
抛出新错误(`Id未找到:${removeId}`);
}

console.log(filteredItems)为什么要在筛选之前抛出异常?如果
filteredItems
的长度与
项的长度相同,则抛出错误“如果您仍然关心效率”-然后继续使用
filter
,因为它具有更高的开发效率,@Bergi Wan不知道该开发。ES5也是这样吗?是的,现代引擎解释ES5时也是这样-代码没有使用ES6+功能没有什么区别。@Bergi不,我的意思是它在IE中也同样有效吗?由于OP正在努力提高效率,他们很可能也想要完全的浏览器兼容性。不知道,必须对其进行基准测试。(就我个人而言,我不在乎IE)。阿法克脉轮在这方面也做得很好。当然,在较旧的发动机中可能存在差异,另一方面,即使在较旧的发动机中,也没有
.filter
,而且您必须对其进行多填充。