I want to lookup for a key on an object, but if the key does't exist, it must return null, is it possible in JavaScript?
const d = {
A: () => { return 'A' },
B: () => { return 'B' },
C: () => { return 'C' },
}
const key = 'Z'
const func = d[key] // HERE
console.log(func)
CodePudding user response:
You can use or: ||
or the newer optional chaining and Nullish coalescing operator
NOTE: the arrow function suggested by Máté Wiszt has to be wrapped in ()
or it will give an error
const d = {
A: () => { return 'A' },
B: () => { return 'B' },
C: () => { return 'C' },
}
let key = 'A'
let func = d[key] || null;
console.log(func && func())
key = 'Z'
func = d[key] || null
console.log(func && func())
func = d[key] || function() { return null };
console.log(func && func())
func = d?.[key] ?? (() => null); // arrow has to be wrapped
console.log(func())
// undefined key
let key1;
console.log({key1})
func = d?.[key1] ?? (() => null); // arrow has to be wrapped
console.log("Using undefined key1:",func())
CodePudding user response:
You can do:
const func = d[key] || () => null;
In this case you can call func safely.
CodePudding user response:
It will be better to use hasOwnProperty
to check wheather that property exist in the object d
or not.
const d1 = {
A: () => { return "A"; },
B: () => { return "B"; },
C: () => { return "C"; },
Z: undefined,
};
const d2 = {
A: () => { return "A"; },
B: () => { return "B"; },
C: () => { return "C"; },
};
const key = "Z";
function getValue(obj, key) {
return obj.hasOwnProperty(key) ? obj[key] : null;
}
const func1 = getValue(d1, key);
console.log(func1);
const func2 = d1[key] || null; // Shouldn't use
console.log(func2);
const func3 = d1[key] ?? null; // Shouldn't use
console.log(func3);