如果我需要在Set中找到一个对象。该集合不包含用作索引的自然键,因此无法使用Map。有几种不同类型的谓词用于搜索Set。看来效率很低
const items = Array.from( mySet )
const found = items.find( item => someTest( item ) )
除非优化器中存在黑魔法,否则它似乎会枚举两次。我知道它公开了一个迭代器接口,但是Array.prototype.find接口比使用带有break语句的for ... of循环更简洁。
有更好的方法吗?
答案 0 :(得分:1)
您在Set上有has方法来查找值的存在。
let set = new Set([1,2,4,5,6,7])
console.log(set.has(2))
console.log(set.has(10))
答案 1 :(得分:0)
Sets实现了迭代器接口,因此您应该能够对其进行迭代以查找您的特定项目。它不会像使用带有高阶命令功能的查找那样出色和声明性,并且效率更高。 您当然可以封装该逻辑以使其变得更好
const findInSet = (pred, set) => {
for (let item of set) if(pred(item)) return item;
}
const item = findInSet(someTest, mySet);
答案 2 :(得分:0)
使用以ID(唯一标识符)为键的Map代替:
const items = [{ id: 1 }, { id: 2 }, { id: 3 }]
const itemsMap = new Map(items.map(o => [o.id, o]))
const item = itemsMap.get(1)
console.log(item)