Reputation: 92
I have an object as such that has been generated by using the lodash _.zipObject()
function. So I have 2 arrays, one of locations, one of numbers.
var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147, …}
I need to return the key based on an input value. For example, function(304)
would return 'Aberdeen'
.
I've tried _.findkey(locs, 304);
but this just returns undefined. Any other attempt I've tried always returns either undefined or -1. Not really sure where to go from here.
Upvotes: 4
Views: 19239
Reputation: 2560
You could do it like this:
var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147}
const getKeyByValue = (obj, value) =>
Object.keys(obj).find(key => obj[key] === value);
console.log(getKeyByValue(locs, 304));
Upvotes: 0
Reputation: 191976
To find the key use a predicate function with _.findKey()
:
var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147 };
var key = _.findKey(locs, function(v) {
return v === 304;
});
console.log(key);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
You can create the predicate by currying _.eq()
with the requested value:
var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147 };
var key = _.findKey(locs, _.curry(_.eq, 304));
console.log(key);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
Upvotes: 5
Reputation: 309
You can simply fetch all the keys using Object.keys() and then use .find() function to get the key out from that array, and then nicely wrap it in a function to make it modular.
var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147, …}
Object.prototype.getKey = function(value) {
var object = this;
return Object.keys(object).find(key => object[key] === value);
};
alert(locs.getKey(304));
Upvotes: 1
Reputation: 2368
You can use custom function to find a key:
function findKey(dataObj, value){
for(var key in dataObj){
if(dataObj.hasOwnProperty(key) && dataObj[key] == value){
return key;
}
}
return false;
}
var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147, …}
console.log(findKey(locs, 304));
Upvotes: 1
Reputation: 68655
With pure Javascript use Object#keys function to get all keys and then compare with your element in the Array#find function
const obj = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147};
const key = Object.keys(obj).find(key => obj[key] === 304);
console.log(key);
With lodash pass predicate into the function
const key = _.findkey(locs, (value) => value === 304);
Upvotes: 5