So I have an Object that contains multiple Objects
const edges = {
edge1: {source: "Horse", target: "4_2_0_0_0f"},
edge2: {source: "Horse", target: "4_2_0_0_0x"},
edge3: {source: "Horse", target: "4_2_0_2_1h"},
edge4: {source: "Horse", target: "4_2_4_0_4z"},
edge5: {source: "Horse", target: "4_2_1_0_0p"},
....}
Now I want to check whether edge2: {source: "Horse", target: "4_2_0_0_0x"} exists in edges or not.
What is the fastest way to do that?
You can Array.some to check if at least one of array elements matches your condition. Before that you will need to convert object you array with Object.values:
const edges = {
edge1: {
source: "Horse",
target: "4_2_0_0_0f"
},
edge2: {
source: "Horse",
target: "4_2_0_0_0x"
},
edge3: {
source: "Horse",
target: "4_2_0_2_1h"
},
edge4: {
source: "Horse",
target: "4_2_4_0_4z"
},
edge5: {
source: "Horse",
target: "4_2_1_0_0p"
},
}
function existsEdge(source, target) {
return Object.values(edges).some(v => v.source === source && v.target === target)
}
console.log(existsEdge('Horse', '4_2_0_0_0x'))
This is effective if you wish to check only once. If you wish to check multiple times, consider using different data structure with fasters checks. Example using Set:
const edges = {
edge1: {
source: "Horse",
target: "4_2_0_0_0f"
},
edge2: {
source: "Horse",
target: "4_2_0_0_0x"
},
edge3: {
source: "Horse",
target: "4_2_0_2_1h"
},
edge4: {
source: "Horse",
target: "4_2_4_0_4z"
},
edge5: {
source: "Horse",
target: "4_2_1_0_0p"
},
}
const index = new Set(Object.values(edges).map(v => `${v.source}:${v.target}`))
function existsEdge(source, target) {
return index.has(`${source}:${target}`)
}
let result = undefined
for (let i = 0; i < 10000000; i++) {
result = existsEdge('Horse', '4_2_1_0_0p')
}
console.log(result)