Bledder
Bledder

Reputation: 63

Get item from js object with partially known key

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

Answers (2)

Bledder
Bledder

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

mplungjan
mplungjan

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

Related Questions