J'ai un objet en JavaScript:
var obj = {
"a": "test1",
"b": "test2"
}
Comment vérifier que test1 existe dans l'objet en tant que valeur?
J'ai un objet en JavaScript:
var obj = {
"a": "test1",
"b": "test2"
}
Comment vérifier que test1 existe dans l'objet en tant que valeur?
Réponses:
Vous pouvez transformer les valeurs d'un objet en tableau et tester la présence d'une chaîne. Il suppose que l'objet n'est pas imbriqué et que la chaîne est une correspondance exacte:
var obj = { a: 'test1', b: 'test2' };
if (Object.values(obj).indexOf('test1') > -1) {
console.log('has test1');
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values
if(Object.values(obj).includes('test1')) { ... }
Essayer:
var obj = {
"a": "test1",
"b": "test2"
};
Object.keys(obj).forEach(function(key) {
if (obj[key] == 'test1') {
alert('exists');
}
});
Ou
var obj = {
"a": "test1",
"b": "test2"
};
var found = Object.keys(obj).filter(function(key) {
return obj[key] === 'test1';
});
if (found.length) {
alert('exists');
}
Cela ne fonctionnera pas pour NaNet -0pour ces valeurs. Vous pouvez utiliser (au lieu de ===) ce qui est nouveau dans ECMAScript 6:
Object.is(obj[key], value);
Avec les navigateurs modernes, vous pouvez également utiliser:
var obj = {
"a": "test1",
"b": "test2"
};
if (Object.values(obj).includes('test1')) {
alert('exists');
}
Utilisez une for...inboucle:
for (let k in obj) {
if (obj[k] === "test1") {
return true;
}
}
Le plus court ES6 + une doublure:
let exists = Object.values(obj).includes("test1");
Vous pouvez utiliser Object.values () :
La
Object.values()méthode renvoie un tableau des propres valeurs de propriété énumérables d'un objet donné, dans le même ordre que celui fourni par unefor...inboucle (la différence étant qu'une boucle d'entrée énumère également les propriétés de la chaîne de prototypes).
puis utilisez la méthode indexOf () :
La
indexOf()méthode renvoie le premier index auquel un élément donné peut être trouvé dans le tableau, ou -1 s'il n'est pas présent.
Par exemple:
Object.values(obj).indexOf("test`") >= 0
Un exemple plus détaillé est ci-dessous:
var obj = {
"a": "test1",
"b": "test2"
}
console.log(Object.values(obj).indexOf("test1")); // 0
console.log(Object.values(obj).indexOf("test2")); // 1
console.log(Object.values(obj).indexOf("test1") >= 0); // true
console.log(Object.values(obj).indexOf("test2") >= 0); // true
console.log(Object.values(obj).indexOf("test10")); // -1
console.log(Object.values(obj).indexOf("test10") >= 0); // false
J'ai fait un test avec tous ces exemples, et je l'ai exécuté dans Node.js v8.11.2 . Prenez ceci comme un guide pour sélectionner votre meilleur choix.
let i, tt;
const obj = { a: 'test1', b: 'test2', c: 'test3', d: 'test4', e: 'test5', f: 'test6' };
console.time("test1")
i = 0;
for( ; i<1000000; i=i+1) {
if (Object.values(obj).indexOf('test4') > -1) {
tt = true;
}
}
console.timeEnd("test1")
console.time("test1.1")
i = 0;
for( ; i<1000000 ; i=i+1) {
if (~Object.values(obj).indexOf('test4')) {
tt = true;
}
}
console.timeEnd("test1.1")
console.time("test2")
i = 0;
for( ; i<1000000; i=i+1) {
if (Object.values(obj).includes('test4')) {
tt = true;
}
}
console.timeEnd("test2")
console.time("test3")
i = 0;
for( ; i<1000000 ; i=i+1) {
for(const item in obj) {
if(obj[item] == 'test4') {
tt = true;
break;
}
}
}
console.timeEnd("test3")
console.time("test3.1")
i = 0;
for( ; i<1000000; i=i+1) {
for(const [item, value] in obj) {
if(value == 'test4') {
tt = true;
break;
}
}
}
console.timeEnd("test3.1")
console.time("test4")
i = 0;
for( ; i<1000000; i=i+1) {
tt = Object.values(obj).some((val, val2) => {
return val == "test4"
});
}
console.timeEnd("test4")
console.time("test5")
i = 0;
for( ; i<1000000; i=i+1) {
const arr = Object.keys(obj);
const len = arr.length;
let i2 = 0;
for( ; i2<len ; i2=i2+1) {
if(obj[arr[i2]] == "test4") {
tt = true;
break;
}
}
}
console.timeEnd("test5")
Sortie sur mon serveur
test1: 272.325 ms
test1.1: 246.316 ms
test2: 251.98 0ms
test3: 73.284 ms
test3.1: 102.029 ms
test4: 339.299 ms
test5: 85.527 ms
Pour un one-liner, je dirais:
exist = Object.values(obj).includes("test1");
console.log(exist);
Vous pouvez essayer ceci:
function checkIfExistingValue(obj, key, value) {
return obj.hasOwnProperty(key) && obj[key] === value;
}
var test = [{name : "jack", sex: F}, {name: "joe", sex: M}]
console.log(test.some(function(person) { return checkIfExistingValue(person, "name", "jack"); }));
getValue = function (object, key) {
return key.split(".").reduce(function (obj, val) {
return (typeof obj == "undefined" || obj === null || obj === "") ? obj : (_.isString(obj[val]) ? obj[val].trim() : obj[val]);}, object);
};
var obj = {
"a": "test1",
"b": "test2"
};
Fonction appelée:
getValue(obj, "a");
var obj = {"a": "test1", "b": "test2"};
var getValuesOfObject = Object.values(obj)
for(index = 0; index < getValuesOfObject.length; index++){
return Boolean(getValuesOfObject[index] === "test1")
}
La méthode Object.values () a renvoyé un tableau (affecté à getValuesOfObject) contenant les propres valeurs de propriété énumérables de l'objet donné (obj). Le tableau a été itéré à l'aide de la forboucle pour récupérer chaque valeur (valeurs dans getValuesfromObject) et renvoie une fonction Boolean () pour savoir si l'expression ("text1" est une valeur dans le tableau en boucle) est vraie.
if( myObj.hasOwnProperty('key') && myObj['key'] === value ){
...
}
La réponse simple à cela est donnée ci-dessous.
Cela fonctionne car chaque type JavaScript a une propriété «constructeur» sur son prototype ».
Cela devrait être une simple vérification.
Exemple 1
var myObj = {"a": "test1"}
if(myObj.a == "test1") {
alert("test1 exists!");
}
var a = {};<br/>'hasOwnProperty' in a' //true
Object.values(obj).includes('test1');