我想要在对数时间内查看容器中是否有一个具有相等值的对象。
我想要以下功能:
const a = [];
const el1 = {name: 'name1', directive: 'directive1'};
const el2 = {name: 'name2', directive: 'directive2'};
const el3 = {name: 'name3', directive: 'directive3'};
const b = {name: 'name1', directive: 'directive1'};
a.push(el1);
a.push(el2);
a.push(el3);
if(a.some(el => (el.name === b.name && el.directive === b.directive ))) {
console.log("YES!");
} else {
console.log("NO!");
}
这让我得到了想要的结果。但是,这是O(N)时间复杂度。
const s = new Set();
const el1 = {name: 'name1', directive: 'directive1'};
const el2 = {name: 'name2', directive: 'directive2'};
const el3 = {name: 'name3', directive: 'directive3'};
const b = {name: 'name1', directive: 'directive1'};
s.add(el1);
s.add(el2);
s.add(el3);
if(s.has(b)) {
console.log("YES!");
} else {
console.log("NO!");
}
这是O(logN)的时间复杂度,但结果并不符合我的要求。
那么,我可以使用哪种JavaScript数据结构来打印出在上述代码中打印“YES”,并具有O(logN)的复杂度?(我不想自己实现一个数据结构)
el1
和b
)是不同的对象引用。你可以通过el1
填充b
。 - Ramin Batenib.name === undefined
,但如果你那样写它可能会记录NO!
。 - Patrick Roberts[{name, directive}]
情况还是更一般的情况? - Scott Sauyet