Entonces, si solo tengo una clave para hacer coincidir, entonces algo como:
var str = "foo"; let [key,val] = Object.entries(obj).find(([key,val]) => val== str); return key;funcionaría maravillosamente. Pero, ¿hay alguna forma de agregar varias claves si el valor coincide?
Para dar un ejemplo de un objeto que podría coincidir con la cadena anterior:
obj = { quay: "foo", key1: "blargh", yaya: "foo", idnet: "blat", blah: "foo", hahas: "blargh" } Lo que quiero hacer es devolver todas las teclas "foo" ( quay , yaya y blah ) en función de la var str coincidente de arriba.
Estoy seguro de que la respuesta es algo simple que estoy pasando por alto.
Use filter en lugar de find y map para eliminar los valores.
const obj = { quay: "foo", key1: "blargh", yaya: "foo", idnet: "blat", blah: "foo", hahas: "blargh" } const str = 'foo'; const keys = Object.entries(obj).filter(([, val]) => val === str).map(([key]) => key); console.log(keys);Use Object.keys() para obtener una matriz de claves y fíltrelas con Array.filter() . En la función de predicado del filtro, tome el valor relevante del objeto usando la clave - obj[key] y compárelo con str .
const str = 'foo' const obj = {"quay":"foo","key1":"blargh","yaya":"foo","idnet":"blat","blah":"foo","hahas":"blargh"} const keys = Object.keys(obj).filter(key => obj[key] === str) console.log(keys)Podría obtener todas las entradas como lo está haciendo, pero en lugar de usar buscar, filtrar todas las entradas con el valor en str que desea encontrar y mapearlo en una lista. Como esto:
const str = "foo"; const obj = { quay: "foo", key1: "blargh", yaya: "foo", idnet: "blat", blah: "foo", hahas: "blargh" } const repeated = Object.entries(obj) .filter(([key, val]) => val === str) .map(([key, val]) => key); console.log(repeated);