ตรวจสอบว่ามีคีย์อยู่ในออบเจ็กต์ JS หรือไม่


88

ฉันมีวัตถุ JavaScript ต่อไปนี้:

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

มีวิธีตรวจสอบว่ามีคีย์อยู่ในอาร์เรย์หรือไม่?

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

ไม่ทำงาน, ไม่เป็นผล.

ฉันต้องทำซ้ำผ่าน obj แบบนี้หรือไม่?

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

4
js - object literal :) (ไม่ใช่ jQuery object)
funerr

จริง;) แสดงว่าฉันไม่มีพื้นหลัง js - เริ่มต้นด้วยไลบรารี jQuery ตั้งแต่เริ่มต้นและฉันเชื่อว่าฉันต้องเรียนรู้พื้นฐาน ...
user2065483

obj.has("key1")จะทำงานถ้าคุณใช้ ES6
Diablo


1
@Diablo ฉันคิดว่าคุณพยายามจะพูดobj.hasOwnProperty("key1")แทนแค่has?
Aminu Kano

คำตอบ:


176

ใช้ตัวinดำเนินการ :

testArray = 'key1' in obj;

Sidenote: สิ่งที่คุณมีจริงๆแล้วไม่มี jQuery object แต่เป็นแค่ JavaScript Object ธรรมดา


4
เราตรวจสอบไม่ได้inเช่นนี้?
SagarPPanchal

5
@SagarPanchal คุณหมายถึงอะไร? บางอย่างเช่นtestArray = !( 'key1' in obj);?
Sirko

50

นั่นไม่ใช่วัตถุ jQuery แต่เป็นเพียงวัตถุ

คุณสามารถใช้เมธอด hasOwnProperty เพื่อตรวจสอบคีย์:

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

คุณไม่ควรใช้มัน ว่ากันว่าช้า วิธีที่ดีที่สุดคือใช้ 'คีย์' ในวัตถุ
hannad rehman

@hannadrehman คุณช่วยอ้างอิงเอกสาร / บทความที่กล่าวถึงได้ไหม :)
บิน

1
@Fan_of_Martijn_Pieters ฉันปฏิบัติตามกฎ ESlint ที่เข้มงวด มีการกล่าวถึงเป็นหนึ่งในกฎ eslint.org/docs/rules/no-prototype-builtins
hannad rehman

@hannadrehman อย่าใช้ key-in-object มันอาจจะผิดธรรมดานี่คือวิธีที่ดีที่สุด

ลดลงเนื่องจากไม่ได้ผลเมื่อตรวจพบคีย์ที่มีค่า null ตัวอย่างเช่นถ้าค่าของ obj ["key1"] == null (ดังนั้น key1 จึงมีอยู่ใน obj และค่าของมันเป็นโมฆะ) สิ่งนี้จะส่งคืนผลลัพธ์ที่เป็นเท็จซึ่ง key1 ไม่อยู่ใน obj
user1258361

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

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

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

ในการเข้าถึงคีย์ลูกของคีย์อื่น

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

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

1
หรือถ้าไม่มี key1 ..if (!("key1" in obj)) { console.log("no key1 in obj"); }
Hastig Zusammenstellen

3

คำตอบข้างต้นเป็นสิ่งที่ดี แต่ก็ดีและมีประโยชน์เช่นกัน

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

เหมาะสำหรับรูปแบบโค้ดสั้น ๆ พิเศษใน if statement:

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

หมายเหตุ: หากคีย์ของคุณเท่ากับ null หรือคำสั่ง "" ของคุณ "ถ้า" จะไม่ถูกต้อง

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

ดังนั้นวิธีที่ดีที่สุดในการตรวจสอบว่ามีคีย์อยู่ใน obj หรือไม่คือ:'a' in obj



1

map.has(key)เป็นวิธีล่าสุดของECMAScript 2015 ในการตรวจสอบการมีอยู่ของคีย์ในแผนที่ โปรดดูรายละเอียดทั้งหมดนี้


0

วิธีที่ง่ายที่สุดคือ

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


ถ้าaเป็นสตริงว่างศูนย์หรือว่างก็จะยังคงส่งคืน 'obj.a ไม่มีอยู่จริง' แม้ว่าจะมีคีย์aอยู่ก็ตาม
Twisted Whisper
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.