Reputation: 63
Let's say you dont know the numbers before the letter here.
var obj = {'1234 x': 1, '32145 y': 2}
How would you retrieve the value 1 from this object.
The normal way of doing this would be:
obj['1234 x'] // 1
But what if you only knew part of the key: 'x'
(the part that comes after the first space)
var key = '1234 x',
known_key = key.split(' ')[0] // 'x'
How would you be able to retrieve this value?
obj['% ' + known_key] // 1
// % represents all possible strings
Upvotes: 0
Views: 59
Reputation: 63
Use a filter.
Retrieve the key and value
function findObject(obj, known_key) {
return Object.fromEntries(
Object.entries(obj)
.filter(e =>
e[0].substr(e[0].indexOf(' ') + 1) == known_key
)
)
}
var object = {
'1234 x': 1,
'32145 y': 2,
'987 y': 3
},
key = 'y'
console.log(
findObject(object, key) // {'32145 y': 2, '987 y': 3}
)
Retrieve the value
function findValue(obj, known_key) {
return Object.entries(obj)
.filter(e =>
e[0].substr(e[0].indexOf(' ') + 1) == known_key
)
.map(e => e[1])
}
var object = {
'1234 x': 1,
'32145 y': 2,
'987 y': 3
},
key = 'y'
console.log(
findValue(object, key) // [2, 3]
)
Upvotes: 2
Reputation: 178375
Filter using endsWith - you can substitute with includes to find the string anywhere
const findPartial = (obj,str) => Object.fromEntries(Object.entries(obj)
.filter(([key, val]) => key.endsWith(str)));
const obj = {
'1234 x': 1,
'32145 y': 2
}
console.log(
findPartial(obj, ' y')
)
Upvotes: 1