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)){}

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


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.


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")) {
  ...
}

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");

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


1

Anda dapat mencoba ini:

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

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

1

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


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


jika aberupa string kosong, nol atau nol, ia akan tetap mengembalikan 'obj.a tidak ada', meskipun kuncinya amemang ada.
Twisted Whisper
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.