So überprüfen Sie mithilfe von JavaScript, ob in einem Objekt ein Wert vorhanden ist

102

Ich habe ein Objekt in JavaScript:

var obj = {
   "a": "test1",
   "b": "test2"
}

Wie überprüfe ich, ob test1 im Objekt als Wert vorhanden ist?

Brown KL
quelle
16
Wow ... diejenigen, die es als Duplikat markiert haben, sind entweder verrückt oder wissen nicht, wie man Englisch liest. Wie auch immer, mit es7 machen Sie so etwas wie:Object.values(obj).includes('test1');
Mali Naeemi
2
Hier ist das nicht Duplikat (auf Schlüssel prüfen), auf das verwiesen wird: stackoverflow.com/questions/1098040/…
Samuel Åslund

Antworten:

124

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

Matt Pileggi
quelle
8
Dies ist Teil von Ecma2017, es ist noch nicht für die meisten Anwendungen verfügbar :(
Ran Halprin
2
Wird in IE 11 und Edge nicht unterstützt, ist es besser, for..in loop wie unten beschrieben zu verwenden
eugenesqr
24
Etwas weniger ausführlich: if(Object.values(obj).includes('test1')) { ... }
Nickb
40

Sie können die Array-Methode verwenden .some:

var exists = Object.keys(obj).some(function(k) {
    return obj[k] === "test1";
});
tymeJV
quelle
34

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');
}

jcubic
quelle
24

Verwenden Sie eine for...inSchleife:

for (let k in obj) {
    if (obj[k] === "test1") {
        return true;
    }
}
isvforall
quelle
@ Gregor spielt keine Rolle, da 'k' erneut definiert wird, wenn der nächste Wert angenommen wird.
Vikrant
4
stark unterschätzte Antwort, die Leistung auf dieser ist besser als jede andere Methode
PirateApp
2
Stimmen Sie dem zu. sehr unterschätzte Antwort ...
Samakaab
20

Kürzester ES6 + ein Liner:

let exists = Object.values(obj).includes("test1");
Hühner
quelle
1
Beachten Sie jedoch, dass der IE .includes () nicht unterstützt. Verwenden Sie ihn daher nur serverseitig mit Node oder wenn Sie sich einfach nicht für den IE interessieren.
João Pimentel Ferreira
19

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 einer for...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

Gefährliche Maus
quelle
8

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
DarckBlezzer
quelle
6

Für einen Einzeiler würde ich sagen:

exist = Object.values(obj).includes("test1");
console.log(exist);
Joshua Shibu
quelle
2

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"); }));
Yokki vallayok
quelle
0

Sie können dieses versuchen

var obj = {
  "a": "test1",
  "b": "test2"
};

const findSpecificStr = (obj, str) => {
  return Object.values(obj).includes(str);
}

findSpecificStr(obj, 'test1');
Fengxh
quelle
-1
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");
Devang Hire
quelle
Haben Sie bei der Implementierung dieser Lösung andere Bibliotheken verwendet?
Sherwin Ablaña Dapito
-2
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.

Chukwuemeka Aigbokhan
quelle
-3
if( myObj.hasOwnProperty('key') && myObj['key'] === value ){
    ...
}
Noctisdark
quelle
-4

Die einfache Antwort darauf ist unten angegeben.

Dies funktioniert, weil jeder JavaScript-Typ eine "Konstruktor" -Eigenschaft auf seinem Prototyp hat .

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Mohd Sahil
quelle
4
Bitte fügen Sie Ihrer Antwort Ihren Code als Text und nicht als Bild hinzu. Siehe auch Wie formatiere ich meine Beiträge mit Markdown oder HTML?
Vasil Velichkov
Bitte transkribieren Sie den Code im Bild in Text. Danke im Voraus.
Peter Mortensen
-7

Dies sollte eine einfache Überprüfung sein.

Beispiel 1

var myObj = {"a": "test1"}

if(myObj.a == "test1") {
    alert("test1 exists!");
}
KpTheConstructor
quelle
1
Dies überprüft den Schlüssel, nicht den Wert.
Jcubic
1
Die Sache wird die Prototypenkette durchqueren und wahrscheinlich wie erwartet funktionieren! Zum Beispiel var a = {};<br/>'hasOwnProperty' in a' //true
Noctisdark