0

I have a javascript object which looks like this:

tabAndFieldLink: {
    'key1': ['value11', 'value12', 'value13', 'value14', 'value15'],
    'key2': ['value21', 'value22', 'value23', 'value24', 'value25', 'value26', 'value27'],
    'key3': ['value31', 'value32', 'value33', 'value34'],
    'key4': ['value41', 'value42'],
}

What I want

I have the value value22 and I want to get it's key i.e. key2.

What I tried

for (err in errorArray) {
    //err contain the value i.e. value22
    var resultObject = search(err, tabAndFieldLink);
    console.log("The result is :", resultObject);
}

function search(nameKey, myArray) {
    for (var i = 0; i < myArray.length; i++) {
        if (myArray[i].indexOf(nameKey) !== -1) {
            return myArray[i];
        }
    }
}

But it is printing "The result is :", undefined. How can I get the key?

Thanks.

5 Answers 5

3

You should use for...in statement to iterates over the enumerable properties of object tabAndFieldLink and as you need key return it.

for (key in obj) {
    if (obj[key].indexOf(nameKey) !== -1) {
        return key;
    }
}

var tabAndFieldLink = {
  'key1': ['value11', 'value12', 'value13', 'value14', 'value15'],
  'key2': ['value21', 'value22', 'value23', 'value24', 'value25', 'value26', 'value27'],
  'key3': ['value31', 'value32', 'value33', 'value34'],
  'key4': ['value41', 'value42'],
}

//err contain the value i.e. value22
var err = 'value22';
var resultObject = search(err, tabAndFieldLink);
console.log("The result is :", resultObject);

function search(nameKey, obj) {
  for (key in obj) {
    if (obj[key].indexOf(nameKey) !== -1) {
      return key;
    }
  }
}

Sign up to request clarification or add additional context in comments.

Comments

1

There are many inbuilt functional behavior present in the Javascript, which can be used in cases like this.

Here is the code using arrays filter

var tabAndFieldLink =  {
    'key1': ['value11', 'value12', 'value13', 'value14', 'value15'],
    'key2': ['value21', 'value22', 'value23', 'value24', 'value25', 'value26', 'value27'],
    'key3': ['value31', 'value32', 'value33', 'value34'],
    'key4': ['value41', 'value42'],
}


function getKey(checkValue) {
    for (key in tabAndFieldLink) {
        var newArr = tabAndFieldLink[key].filter(function(value){
            return value == 'value22';
        });
        if(newArr.length > 0) {
            console.log("Found......", key);
            return key;
            }
    }
}

console.log(getKey('value22'));

Comments

0

You could use find and Object Keys function

var data = {
    'key1': ['value11', 'value22', 'value13', 'value14', 'value15'],
    'key2': ['value21', 'value22', 'value23', 'value24', 'value25', 'value26', 'value27'],
    'key3': ['value31', 'value32', 'value33', 'value34'],
    'key4': ['value41', 'value42'],
}

function findValue(search){
var result = []
Object.keys(data).forEach(function(key){
 var r = data[key].find(function(value){ 
           return value === search 
        })
 r && result.push(key)
})
console.log(result)
}

findValue("value22")

Comments

0

You could check with Array#some, if the value is in the array with a specific key, then return that key.

function  getKey(object, value) {
    var key;
    Object.keys(object).some(function (k) {
        if (object[k].indexOf(value) !== -1) {
            key = k;
            return true;
        }
    });
    return key;
}

var object = { key1: ['value11', 'value12', 'value13', 'value14', 'value15'], key2: [ 'value21', 'value22', 'value23', 'value24', 'value25', 'value26', 'value27'], key3: ['value31', 'value32', 'value33', 'value34'], key4: ['value41', 'value42'] },
    find = 'value22',
    key = getKey(object, find);

console.log(key);

ES6 with Array#find and Array#includes

function  getKey(object, value) {
    return Object.keys(object).find(k => object[k].includes(value));
}


var object = { key1: ['value11', 'value12', 'value13', 'value14', 'value15'], key2: [ 'value21', 'value22', 'value23', 'value24', 'value25', 'value26', 'value27'], key3: ['value31', 'value32', 'value33', 'value34'], key4: ['value41', 'value42'] },
    find = 'value22',
    key = getKey(object, find);

console.log(key);

Comments

0

The tabAndFieldLink structure is a Hash containing key value pairs. Each value is an Array.

Navigate the structure as per the snippet below.

var tabAndFieldLink = {
  'key1': ['value11', 'value12', 'value13', 'value14', 'value15'],
  'key2': ['value21', 'value22', 'value23', 'value24', 'value25', 'value26', 'value27'],
  'key3': ['value31', 'value32', 'value33', 'value34'],
  'key4': ['value41', 'value42'],
};

var resultObject = search("value22", tabAndFieldLink);
console.log("The result is :", resultObject);

function search(nameKey, myHash) {
  for (var key in myHash) {
    if (myHash[key].indexOf(nameKey) !== -1) {
      return key;
    }
  }
}

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.