Memeriksa apakah kunci ada di objek JS

88

Saya memiliki objek JavaScript berikut:

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

Apakah ada cara untuk memeriksa apakah ada kunci dalam larik, serupa dengan ini?

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

tidak bekerja.

Apakah saya harus mengulang-ulang keberatan seperti ini?

jQuery.each(obj, function(key,val)){}
pengguna2065483
sumber
4
js - objek literal :) (bukan objek jQuery)
funerr
Benar;), menunjukkan bahwa saya tidak memiliki latar belakang js - dimulai dengan pustaka jQuery sejak awal, dan saya yakin saya perlu mempelajari dasar-dasarnya ...
user2065483
obj.has("key1")akan berfungsi jika Anda menggunakan ES6.
Diablo
2
Kemungkinan duplikat Memeriksa apakah ada kunci dalam objek JavaScript?
Gerhard Powell
1
@Diablo Saya pikir Anda mencoba untuk mengatakan obj.hasOwnProperty("key1")bukan hanya has?
Aminu Kano

Jawaban:

176

Gunakan inoperator :

testArray = 'key1' in obj;

Catatan samping: Apa yang Anda dapatkan di sana, sebenarnya bukanlah objek jQuery, tetapi hanya Objek JavaScript biasa.

Sirko
sumber
4
Bisakah kita memeriksa tidak inseperti ini?
SagarPPanchal
5
@SagarPanchal Apa maksudmu? Sesuatu seperti testArray = !( 'key1' in obj);?
Sirko
50

Itu bukan objek jQuery, itu hanya sebuah objek.

Anda dapat menggunakan metode hasOwnProperty untuk memeriksa kunci:

if (obj.hasOwnProperty("key1")) {
  ...
}
Guffa
sumber
Anda tidak boleh menggunakannya. itu dikatakan lambat. cara terbaik adalah dengan menggunakan 'key' di objek
hannad rehman
@hannadrehman Bisakah Anda memberi saya referensi ke dok / artikel yang disebutkan? :)
Nabin
1
@Fanofartijnieters saya mengikuti aturan ESlint yang ketat. itu disebutkan di sana sebagai salah satu aturan. eslint.org/docs/rules/no-prototype-builtins
hannad rehman
@hannadrehman Jangan gunakan key-in-object, ini bisa jadi salah, ini adalah cara terbaik.
Tidak dipilih karena ini tidak berfungsi saat mendeteksi kunci dengan nilai null. Misalnya, jika nilai obj ["key1"] == null (jadi key1 ada di obj dan nilainya null), ini akan mengembalikan hasil palsu bahwa key1 tidak ada di obj.
pengguna1258361
7
var obj = {
    "key1" : "k1",
    "key2" : "k2",
    "key3" : "k3"
};

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

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

Untuk mengakses kunci anak dari kunci lain

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

if ("keyF" in obj.key4)
    console.log("has keyF in obj");
Fernando_Jr
sumber
1
Atau jika tidak ada key1 ..if (!("key1" in obj)) { console.log("no key1 in obj"); }
Hastig Zusammenstellen
3

Jawaban di atas bagus. Tapi ini juga bagus dan berguna.

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

Ini bagus untuk gaya pendek kode khusus dalam pernyataan 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');
}

Catatan: Jika kunci Anda sama dengan null atau pernyataan "" your "if" akan salah.

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

Jadi, cara terbaik untuk memeriksa apakah ada kunci di objek adalah:'a' in obj

Ali Hallaji
sumber
1

Anda dapat mencoba ini:

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

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

map.has(key)adalah cara ECMAScript 2015 terbaru untuk memeriksa keberadaan kunci di peta. Lihat ini untuk detail lengkap.

Diablo
sumber
0

cara paling sederhana adalah

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

Khan
sumber
jika aberupa string kosong, nol atau nol, ia akan tetap mengembalikan 'obj.a tidak ada', meskipun kuncinya amemang ada.
Twisted Whisper