JS nesnesinde bir anahtar olup olmadığını kontrol etme


88

Aşağıdaki JavaScript nesnesine sahibim:

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

Dizide buna benzer bir anahtar olup olmadığını kontrol etmenin bir yolu var mı?

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

çalışmıyor.

Nesneyi bu şekilde yinelemem gerekir mi?

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

4
js - object literal :) (jQuery nesnesi değil)
funerr

Doğru;), jQuery kitaplığıyla en başından beri başladığım bir js geçmişine sahip olmadığımı gösteriyor ve temelleri öğrenmem gerektiğine inanıyorum ...
user2065483

obj.has("key1")ES6 kullanıyorsanız çalışacaktır.
Diablo


1
@Diablo Sanırım obj.hasOwnProperty("key1")sadece yerine söylemeye çalışıyorsun has?
Aminu Kano

Yanıtlar:


176

inOperatörü kullanın :

testArray = 'key1' in obj;

Not: Elinizde olan şey aslında jQuery nesnesi değil, yalnızca düz bir JavaScript Nesnesi.


4
inBöyle olmadığını kontrol edebilir miyiz ?
SagarPPanchal

5
@SagarPanchal Ne demek istiyorsun? Gibi bir şey testArray = !( 'key1' in obj);?
Sirko

50

Bu bir jQuery nesnesi değil, sadece bir nesne.

Bir anahtarı kontrol etmek için hasOwnProperty yöntemini kullanabilirsiniz:

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

onu kullanmamalısın. yavaş olduğu söyleniyor. en iyi yol nesnede 'anahtar' kullanmaktır
hannad rehman

@hannadrehman Bahsedildiği dokümana / makaleye bir referans verebilir misiniz? :)
Nabin

1
@Fan_of_Martijn_Pieters sıkı ESlint kural setini takip ediyorum. orada kurallardan biri olarak bahsedilir. eslint.org/docs/rules/no-prototype-builtins
hannad rehman

@hannadrehman Nesnede anahtarı kullanmayın, bu açıkça yanlış olabilir, bu en iyi yoldur.

Boş değerli anahtarlar algılanırken çalışmadığı için olumsuz oy verildi. Örneğin, obj ["key1"] == null değeri (yani key1 obj içinde mevcutsa ve değeri null ise), bu key1'in obj'de olmadığına dair yanlış bir sonuç döndürür.
user1258361

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

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

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

Başka bir anahtarın alt anahtarına erişmek için

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

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

1
Ya da if (!("key1" in obj)) { console.log("no key1 in obj"); }
anahtar yoksa1

3

Yukarıdaki cevaplar iyidir. Ama bu da iyi ve kullanışlı.

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

İf ifadelerindeki özel kısa kod stili için iyidir:

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

Not: Anahtarınız null'a eşitse veya "" sizin "if" ifadeniz yanlış olacaktır.

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

Bu nedenle, bir objede anahtar olup olmadığını kontrol etmenin en iyi yolu şudur:'a' in obj


1

Bunu deneyebilirsiniz:

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

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

1

map.has(key) bir anahtarın haritadaki varlığını kontrol etmenin en son ECMAScript 2015 yoludur. Bu başvurun tüm ayrıntılar için.


0

en basit yol

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


eğer aboş bir dize, sıfır veya null olur, hala anahtar rağmen 'obj.a yoktur' döndürecektir ayapar bulunmaktadır.
Twisted Whisper
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.