0

I'm trying to find key of object which is containing my value.

There is my object:

var obj = {}

obj["post1"] = {
    "title":    "title1",
    "subtitle": "subtitle1"
}

obj["post2"] = {
    "title":    "title2",
    "subtitle": "subtitle2"
}

And now, I'm trying to get object key of value "title2"

function obk (obj, val) {
  const key = Object.keys(obj).find(key => obj[key] === val);
  return key
}

console.log(obk(obj, "title2"))

Output:

undefined

Desired output:

post2
1
  • 2
    obj[key].title === val Commented Sep 26, 2018 at 22:18

3 Answers 3

2

You have to access the subkey of the object:

 function obk (obj, prop, val) {
   return Object.keys(obj).find(key => obj[key][prop] === val);
 }

 console.log(obk(obj, "title", "title2"));

Or you could search all values of the subobject:

 function obk (obj, val) {
   return Object.keys(obj).find(key => Object.values( obj[key] ).includes(val)); 
 }

 console.log(obk(obj, "title2"))
Sign up to request clarification or add additional context in comments.

Comments

0

You can use array map:

var obj = {}

obj["post1"] = {
    "title":    "title1",
    "subtitle": "subtitle1"
}

obj["post2"] = {
    "title":    "title2",
    "subtitle": "subtitle2"
}
//console.log(obj);
function obk (obj, val) {
    var result = "";
    Object.keys(obj).map(key => {
        if(obj[key].title === val)
            result = key;
    });
    return result;
}

console.log(obk(obj, "title2"));

Or use array find to optimize searching function:

var obj = {}

obj["post1"] = {
    "title":    "title1",
    "subtitle": "subtitle1"
}

obj["post2"] = {
    "title":    "title2",
    "subtitle": "subtitle2"
}
//console.log(obj);
function obk (obj, val) {
    result = Object.keys(obj).find(key => {
        if(obj[key].title === val)
            return key;
    });
    return result;
}

console.log(obk(obj, "title1"));

Comments

0

You pretty much have it, just add obj[key].title === val as mentioned by Chris G.

Here's an ES6 one liner that returns an array of all matches.

var obj = {}

obj["post1"] = {
    "title":    "title1",
    "subtitle": "subtitle1"
}

obj["post2"] = {
    "title":    "title2",
    "subtitle": "subtitle2"
}

const filterByTitle = (obj, title) => 
  Object.values(obj).filter(o => o.title === title);

console.log(filterByTitle(obj, 'title1'))

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.