J'ai un objet comme ci-dessous;
FOO: { BAR: [9,32,8,12 ], ZET: 4, BETA: [3,14,6,2], ALPHA: 37 },
J'ai besoin de rechercher les valeurs de cet objet pour faire correspondre les valeurs avec les clés
. Il y a des tonnes d'échantillons qui donnent des clés
avec une valeur singulière mais je n'ai pas trouvé d'échantillon capable de rechercher également dans les valeurs qui sont dans des tableaux.
Comment puis-je être capable de rechercher l'ensemble de ces valeurs de l'objet FOO
et de les faire correspondre avec les keys
?
Remarque : Le but; Je vais chercher une entrée et si l'entrée donnée est 2
alors attendez-vous à obtenir la clé BETA
ou si l'entrée donnée est 4
alors ZET
.
Donc, fondamentalement, les valeurs seront déjà des valeurs uniques prédéfinies.
6 Réponses :
Quelque chose de ce genre devrait fonctionner:
// What we're searching FOO = { BAR: [9,32,8,12 ], ZET: 4, BETA: [3,14,6,2], ALPHA: 37 }; function findValue(findValue, obj) { return Object.entries(FOO) .filter(([key,value]) => value === findValue || Array.isArray(value) && value.includes(findValue)) .map(([key,value])=> key); } function testfindValue(value, obj) { console.log("testfindValue: \nInput: " + value, "Result: ", findValue(value,obj)); } testfindValue(4, FOO); testfindValue(6, FOO); testfindValue(32, FOO); testfindValue(99, FOO);
Cher @TerryLennox, votre extrait fonctionne parfaitement, mais je vais quand même utiliser la solution de @MohammedUsman pendant que je dois définir quel obj. devrait être considéré dans l'instruction de retour de findValue
mais la solution d'Usman peut fonctionner avec n'importe quel obj. Alors merci pour vos efforts.
Super, heureux de voir que vous avez une solution!
Vous pouvez le faire avec une simple boucle for ... in
et les méthodes .concAT ()
et .includes ()
de tableaux :
let obj = { BAR: [9,32,8,12 ], ZET: 4, BETA: [3,14,6,2], ALPHA: 37 }; let locator = (o, v) => { for (var prop in o) { if([].concat(o[prop]).includes(v)){ return prop; } } } console.log(locator(obj, 2)); console.log(locator(obj, 4));
Cher @MohammadUsman, merci pour la solution et elle a une très bonne utilisation avec tous les obj globaux. Cela a si bien fonctionné pour mon objectif.
Vous pouvez simplement parcourir l'objet en boucle et rechercher la valeur pour identifier la clé. Si plusieurs correspondances sont trouvées, un tableau de clés correspondant au résultat sera renvoyé.
function objSearch(key, obj) { const keys = []; for (let item in obj) { if (obj.hasOwnProperty(item)) { if (obj[item] === key || (Array.isArray(obj[item]) && obj[item].indexOf(key) > -1)) { keys.push(item); } } } return keys; } const obj = { FOO: { BAR: [9, 32, 8, 12], ZET: 4, BETA: [3, 14, 6, 2], ALPHA: 37 } }; const res1 = objSearch(14, obj.FOO); // Exist const res2 = objSearch(15, obj.FOO); // Does not exist const res3 = objSearch(37, obj.FOO); // Exist console.log(res1); console.log(res2); console.log(res3);
Essayez cet extrait de code,
Je vérifie les conditions pour les valeurs d'objet, que ce soit son tableau ou sa valeur et la condition appliquée conformément à cela. J'ai également gardé la clé parent dynamique.
var abc = { FOO: { BAR: [9, 32, 8, 12], ZET: 4, BETA: [3, 14, 6, 2], ALPHA: 37 }, DAB: { DBAR: [9, 32, 8, 12], DZET: 4, DBETA: [3, 14, 6, 2], DALPHA: 37 }, }; function retTitle(abc, parent, k) { var title = ''; $.each(abc[parent], function(x, y) { if ((Array.isArray(y) && y.indexOf(k) != -1) || (!Array.isArray(y) && y == k)) { title = x; return; } }); return title; } var title = retTitle(abc, 'DAB', 4); console.log(title);
Vous pouvez utiliser une simple boucle for ... in
pour parcourir les clés. Vérifiez ensuite si la valeur est un nombre et correspond à ce que vous recherchez. Si ce n'est pas un nombre, c'est un tableau - vous vérifiez donc que ce tableau comprend le nombre que vous recherchez.
var FOO = { BAR: [9,32,8,12 ], ZET: 4, BETA: [3,14,6,2], ALPHA: 37 }; function findKeyByValue(obj, val) { for (var i in FOO) { if (!obj.hasOwnProperty(i)) continue; if (typeof FOO[i] === 'number') { if(FOO[i] === val) return i; } else { if(FOO[i].includes(val)) return i; } } } console.log(findKeyByValue(FOO, 4));
Vous pouvez obtenir les clés, créer un tableau de valeurs et vérifier avec includes
. Renvoie la clé trouvée.
function find(object, value) { return Object .keys(object) .find(k => [].concat(object[k]).includes(value)); } var object = { FOO: { BAR: [9, 32, 8, 12], ZET: 4, BETA: [3, 14, 6, 2], ALPHA: 37 } }; console.log(find(object.FOO, 4)); console.log(find(object.FOO, 8));
C'est essentiellement là que j'allais avec ça aussi
veuillez ajouter la valeur que vous recherchez, le résultat et ce que vous avez essayé.
Je vais fournir des valeurs qui dépendent de différentes entrées. Donc, si l'entrée donnée est
2
, attendez-vous à obtenir la cléBETA
ou si l'entrée donnée est4
alorsZET code > ...
Que faire si une valeur existe à la fois en tant qu'indépendant et en tableau?
@MohammadUsman J'ai mis à jour le message et il n'y aura pas de valeurs en double.
Ces numéros sont-ils uniques dans
FOO
? Un nombre peut-il être dans plus d'un tableau?@Dmitry no. ils seront uniques comme je l'ai noté dans le post.
Voulez-vous essentiellement traiter le tout comme un seul tableau de valeurs?