Sprawdzanie, czy klucz istnieje w obiekcie JS


88

Mam następujący obiekt JavaScript:

var obj = {
    "key1" : val,
    "key2" : val,
    "key3" : val
}

Czy istnieje sposób sprawdzenia, czy klucz istnieje w tablicy, podobny do tego?

testArray = jQuery.inArray("key1", obj);

nie działa.

Czy muszę iterować przez obiekt w ten sposób?

jQuery.each(obj, function(key,val)){}

4
js - dosłowny obiekt :) (nie obiekt jQuery)
funerr

Prawda;), pokazuje, że nie mam tła w js - zacząłem od biblioteki jQuery od samego początku i uważam, że muszę się nauczyć podstaw ...
user2065483

obj.has("key1")będzie działać, jeśli używasz ES6.
Diablo


1
@Diablo Myślę, że próbujesz powiedzieć, obj.hasOwnProperty("key1")a nie tylko has?
Aminu Kano,

Odpowiedzi:


173

Użyj inoperatora :

testArray = 'key1' in obj;

Uwaga: to, co tam dostałeś, nie jest właściwie obiektem jQuery, ale zwykłym obiektem JavaScript.


4
Czy możemy to sprawdzić nie w inten sposób?
SagarPPanchal

5
@SagarPanchal Co masz na myśli? Coś jak testArray = !( 'key1' in obj);?
Sirko

49

To nie jest obiekt jQuery, to tylko obiekt.

Aby sprawdzić klucz, możesz użyć metody hasOwnProperty:

if (obj.hasOwnProperty("key1")) {
  ...
}

nie powinieneś go używać. mówi się, że jest powolny. Najlepszym sposobem jest użycie „klucza” w obiekcie
hannad rehman

@hannadrehman Czy możesz podać mi odniesienie do dokumentu / artykułu, w którym jest wspomniany? :)
Nabin

1
@Fan_of_Martijn_Pieters Przestrzegam ścisłego zestawu reguł ESlint. jest tam wspomniana jako jedna z zasad. eslint.org/docs/rules/no-prototype-builtins
hannad rehman

@hannadrehman Nie używaj klucza w obiekcie, może być po prostu błędny, to jest najlepszy sposób.

Negocjowano, ponieważ nie działa to w przypadku wykrywania kluczy o wartości null. Na przykład, jeśli wartość obj ["klucz1"] == null (więc klucz1 istnieje w obj i jego wartość jest zerowa), zwróci to fałszywy wynik, że klucz1 nie znajduje się w obj.
user1258361

7
var obj = {
    "key1" : "k1",
    "key2" : "k2",
    "key3" : "k3"
};

if ("key1" in obj)
    console.log("has key1 in obj");

================================================== =======================

Dostęp do klucza podrzędnego innego klucza

var obj = {
    "key1": "k1",
    "key2": "k2",
    "key3": "k3",
    "key4": {
        "keyF": "kf"
    }
};

if ("keyF" in obj.key4)
    console.log("has keyF in obj");

1
Lub jeśli nie ma if (!("key1" in obj)) { console.log("no key1 in obj"); }
klucza 1

3

Powyższe odpowiedzi są dobre. Ale to też jest dobre i przydatne.

!obj['your_key']  // if 'your_key' not in obj the result --> true

Jest dobry dla krótkiego stylu kodu specjalnego w instrukcjach if:

if (!obj['your_key']){
    // if 'your_key' not exist in obj
    console.log('key not in obj');
} else {
    // if 'your_key' exist in obj
    console.log('key exist in obj');
}

Uwaga: jeśli twój klucz jest równy null lub "twoje" jeśli "instrukcja będzie błędna.

obj = {'a': '', 'b': null, 'd': 'value'}
!obj['a']    // result ---> true
!obj['b']    // result ---> true
!obj['c']    // result ---> true
!obj['d']    // result ---> false

Zatem najlepszym sposobem sprawdzenia, czy klucz istnieje w obj, jest:'a' in obj


1

Możesz spróbować tego:

const data = {
  name : "Test",
  value: 12
}

if("name" in data){
  //Found
}
else {
  //Not found
}


0

najprostszy sposób to

const obj = {
  a: 'value of a',
  b: 'value of b',
  c: 'value of c'
};

if(obj.a){
  console.log(obj.a);
}else{
  console.log('obj.a does not exist');
}


jeśli ajest pustym łańcuchem, zerem lub null, nadal zwróci „obj.a nie istnieje”, nawet jeśli klucz aistnieje.
Twisted Whisper
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.