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.

Satpal
134k13 gold badges168 silver badges171 bronze badges
asked Jan 16, 2017 at 9:39

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;
 }
 }
}

answered Jan 16, 2017 at 9:44
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'));
answered Jan 16, 2017 at 10:03

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

answered Jan 16, 2017 at 9:53

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

answered Jan 16, 2017 at 9:48

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;
 }
 }
}

answered Jan 16, 2017 at 9:50

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

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.