The dictionary concept here is ambiguous:
Objects as dictionaries (or Hash Maps)
What you call a dictionary is a basic object in Javascript.
To obtain the keys you have this functionality:
let diccionario = {1: "uno", 2: "dos", 3: "tres"};
let claves=Object.keys(diccionario);
console.log(claves);
On the other hand, you could go through the keys in the following way:
let diccionario = {1: "uno", 2: "dos", 3: "tres"};
for (let i in diccionario) {
console.log('la clave es',i);
}
But to know if a key exists, in a pragmatic way, you can simply compare with undefined
:
let diccionario = {1: "uno", 2: "dos", 3: "tres"};
for (let i=0;i<5;i++) {
if (diccionario[i] === undefined) {
console.log('la clave',i,'no está presente');
} else {
console.log('la clave',i,'está presente');
}
}
While it is true that the key can be present, but not save any value, in practice there is no difference between considering that it is not present or that its value is undefined:
let objeto={ a: 1, b: undefined, c: 3};
console.log(Object.keys(objeto));
console.log('Miramos b:', objeto.b);
console.log('Miramos d:', objeto.d);
delete objeto.a;
console.log('Hemos quitado a, las claves restantes son',Object.keys(objeto));
console.log('comprobamos su valor:', objeto.a);
If you want to know if really the key does not exist, even with undefined value, there is the hasOwnProperty
method:
let obj = {1: "uno", 2: undefined, 3: "tres"};
console.log("existe 1?", obj.hasOwnProperty(1));
console.log("existe 2?", obj.hasOwnProperty(2)); //aunque sea undefined
real dictionary (using a class designed for that purpose)
Say what you really want is a dictionary, Javascript has the class Map , which gives more possibilities than a simple object, such as keys can be objects and not merely text or numbers, or you can ask how many elements there are:
var miMapa = new Map();
//Potenciales claves
var claveObj = {},
claveFunc = function () {},
claveCadena = "una cadena";
// asignando valores
miMapa.set(claveCadena, "valor asociado con 'una cadena'");
miMapa.set(claveObj, "valor asociado con claveObj");
miMapa.set(claveFunc, "valor asociado with claveFunc");
console.log("Tamaño",miMapa.size);
console.log("buscando con una clave string",miMapa.get(claveCadena));
console.log("buscando con una clave objeto",miMapa.get(claveObj));
console.log("buscando con una clave función",miMapa.get(claveFunc));
console.log('Existe "una cadena" como clave?',miMapa.has("una cadena"));