我想检查数组的每个id是否存在现有对象。
const ids = [ 'xxnQt5X8pfbcJMn6i', 'fbcJMn6ixxnQt5X8p' ]
const target = [
{ _id: 'xxnQt5X8pfbcJMn6i' },
{ _id: 'Qt5X8pfbcJMn6ixxn' },
]
在这个例子中,我想获得false
,因为第二个ID(fbcJMn6ixxnQt5X8p)不存在。
这应该返回true
:
const ids = [ 'xxnQt5X8pfbcJMn6i', 'fbcJMn6ixxnQt5X8p' ]
const target = [
{ _id: 'xxnQt5X8pfbcJMn6i' },
{ _id: 'Qt5X8pfbcJMn6ixxn' },
{ _id: 'fbcJMn6ixxnQt5X8p' },
]
这是我尝试过的:
ids.every(id => target.find(element => element._id === id))
答案 0 :(得分:1)
你非常接近,你需要将一个函数而不是一个对象传递给find
- 如果你只是想要我推荐使用some()
而不是find
知道它是否存在,而不是你需要对象作为回报。
const ids = [ 'xxnQt5X8pfbcJMn6i', 'fbcJMn6ixxnQt5X8p' ]
const target = [
{ _id: 'xxnQt5X8pfbcJMn6i' },
{ _id: 'Qt5X8pfbcJMn6ixxn' },
{ _id: 'fbcJMn6ixxnQt5X8p' },
]
const allIn = ids.every(id => target.some(({_id}) => id === _id));
console.log(allIn);
答案 1 :(得分:1)
使用大量条目时,使用Set可能会更快(因此我们得到O(n + m)
而不是O(n * m)
):
const idSet = new Set(target.map(el => el._id));
const result = ids.every(id => idSet.has(id));
答案 2 :(得分:0)
由于每个人本身都是一个检查方法,因此它通过提供的函数返回true
或false
。因此,您只需返回false
:
const res = const res = ids.every(id => target._id === id);
console.log(res);
或true
:
const res = ids.every(id => target._id !== id);
console.log(res);