javascript - find nested object key by its value

前端 未结 3 1576
忘了有多久
忘了有多久 2021-01-29 01:27

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

There is my object:

var obj = {}

obj[\"post1\"] = {
    \"title\":    \"title1\",
    \         


        
相关标签:
3条回答
  • 2021-01-29 02:07

    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'))

    0 讨论(0)
  • 2021-01-29 02:10

    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"))
    
    0 讨论(0)
  • 2021-01-29 02:12

    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"));

    0 讨论(0)
提交回复
热议问题