在过滤items
之前,它将检查removeId
中是否存在items
,否则将引发异常。有没有办法避免两个循环?这段代码可能因为两个循环而被错误地编写。
const items = [
{ "Id": 111 },
{ "Id": 111 },
{ "Id": 222 },
{ "Id": 222 },
{ "Id": 333 },
{ "Id": 333 },
]
const removeId = 222;
const find = items.some(item => item.Id === removeId);
if (!find) {
throw new Error(`Id not found: ${removeId} `);
}
const filteredItems = items.filter(item => item.Id !== removeId);
console.log(filteredItems);
答案 0 :(得分:1)
如果您打算立即抛出错误以避免出现filter
部分,则无论如何您都必须遍历数组。因此,您无法避免至少迭代一次数组。。您可以检查过滤后的数组和原始数组的长度是否相同,以查看是否需要引发异常并执行该操作。同时过滤。
const items = [
{ "Id": 111 },
{ "Id": 111 },
{ "Id": 222 },
{ "Id": 222 },
{ "Id": 333 },
{ "Id": 333 }
];
const removeId = 222;
const filteredItems = items.filter(item => item.Id !== removeId);
if (filteredItems.length === items.length) {
throw new Error(`Id not found: ${removeId} `);
}
console.log(filteredItems);
如果您仍然担心效率,可以用Array
循环替换Array#filter
方法调用(即for (;;)
)。
在现代浏览器中,Array
方法的效率与for
循环一样高(Bergi揭示了信息)