Ich habe ein Objekt in JavaScript:
var obj = {
"a": "test1",
"b": "test2"
}
Wie überprüfe ich, ob test1 im Objekt als Wert vorhanden ist?
Ich habe ein Objekt in JavaScript:
var obj = {
"a": "test1",
"b": "test2"
}
Wie überprüfe ich, ob test1 im Objekt als Wert vorhanden ist?
Antworten:
Sie können die Werte eines Objekts in ein Array umwandeln und testen, ob eine Zeichenfolge vorhanden ist. Es wird davon ausgegangen, dass das Objekt nicht verschachtelt ist und die Zeichenfolge genau übereinstimmt:
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')) { ... }
Versuchen:
var obj = {
"a": "test1",
"b": "test2"
};
Object.keys(obj).forEach(function(key) {
if (obj[key] == 'test1') {
alert('exists');
}
});
Oder
var obj = {
"a": "test1",
"b": "test2"
};
var found = Object.keys(obj).filter(function(key) {
return obj[key] === 'test1';
});
if (found.length) {
alert('exists');
}
Dies funktioniert für NaNund -0für diese Werte nicht. Sie können (anstelle von ===) dem verwenden, was in ECMAScript 6 neu ist:
Object.is(obj[key], value);
Mit modernen Browsern können Sie auch Folgendes verwenden:
var obj = {
"a": "test1",
"b": "test2"
};
if (Object.values(obj).includes('test1')) {
alert('exists');
}
Verwenden Sie eine for...inSchleife:
for (let k in obj) {
if (obj[k] === "test1") {
return true;
}
}
Kürzester ES6 + ein Liner:
let exists = Object.values(obj).includes("test1");
Sie können Object.values () verwenden :
Die
Object.values()Methode gibt ein Array der eigenen aufzählbaren Eigenschaftswerte eines bestimmten Objekts in derselben Reihenfolge zurück, die von einerfor...inSchleife bereitgestellt wird (der Unterschied besteht darin, dass eine For-In-Schleife auch Eigenschaften in der Prototypkette auflistet).
und verwenden Sie dann die indexOf () -Methode:
Die
indexOf()Methode gibt den ersten Index zurück, an dem ein bestimmtes Element im Array gefunden werden kann, oder -1, wenn es nicht vorhanden ist.
Beispielsweise:
Object.values(obj).indexOf("test`") >= 0
Ein ausführlicheres Beispiel finden Sie unten:
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
Ich habe einen Test mit all diesen Beispielen durchgeführt und diesen in Node.js v8.11.2 ausgeführt . Nehmen Sie dies als Leitfaden, um Ihre beste Wahl zu treffen.
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")
Ausgabe auf meinem Server
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
Für einen Einzeiler würde ich sagen:
exist = Object.values(obj).includes("test1");
console.log(exist);
Sie können dies versuchen:
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"
};
Funktion aufgerufen:
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")
}
Die Object.values () -Methode hat ein Array zurückgegeben (getValuesOfObject zugewiesen), das die eigenen aufzählbaren Eigenschaftswerte des angegebenen Objekts (obj) enthält. Das Array wurde mithilfe der forSchleife iteriert , um jeden Wert (Werte im getValuesfromObject) abzurufen, und gibt eine Boolean () -Funktion zurück, um herauszufinden, ob der Ausdruck ("text1" ist ein Wert im Schleifenarray) wahr ist.
if( myObj.hasOwnProperty('key') && myObj['key'] === value ){
...
}
Die einfache Antwort darauf ist unten angegeben.
Dies funktioniert, weil jeder JavaScript-Typ eine "Konstruktor" -Eigenschaft auf seinem Prototyp hat .
Dies sollte eine einfache Überprüfung sein.
Beispiel 1
var myObj = {"a": "test1"}
if(myObj.a == "test1") {
alert("test1 exists!");
}
var a = {};<br/>'hasOwnProperty' in a' //true
Object.values(obj).includes('test1');