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)){}
user2065483
źródło
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.

Sirko
źródło
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")) {
  ...
}
Guffa
źródło
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");
Fernando_Jr
źródło
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

Ali Hallaji
źródło
1

Możesz spróbować tego:

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

if("name" in data){
  //Found
}
else {
  //Not found
}
Achsuthan
źródło
1

map.has(key)to najnowszy sposób sprawdzania obecności klucza na mapie zgodnie z ECMAScript 2015 . Zapoznaj się z tym, aby uzyskać szczegółowe informacje.

Diablo
źródło
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');
}

Chan
źródło
jeśli ajest pustym łańcuchem, zerem lub null, nadal zwróci „obj.a nie istnieje”, nawet jeśli klucz aistnieje.
Twisted Whisper