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