একটি জাভাস্ক্রিপ্ট অবজেক্টে কী উপস্থিত আছে কিনা তা পরীক্ষা করছেন?


2961

জাভা স্ক্রিপ্ট অবজেক্টে বা অ্যারেতে একটি নির্দিষ্ট কী উপস্থিত আছে কিনা তা আমি কীভাবে চেক করব?

যদি কোনও কী উপস্থিত না থাকে এবং আমি এটি অ্যাক্সেস করার চেষ্টা করি তবে এটি কী মিথ্যা ফিরে আসবে? নাকি ত্রুটি ছুড়ে মারবে?


2
জাভাস্ক্রিপ্টে সমস্ত কিছু (প্রায় সবকিছু) একটি অবজেক্ট বা এটি হিসাবে কাস্ট করা যেতে পারে। @ পেট্রিকএম ইঙ্গিত করেছেন ঠিক এমনভাবে সিউডো এসোসিয়েটিভ অ্যারেগুলি জন্মগ্রহণ করে।
অ্যান্ড্রু লারসন

এই বেঞ্চমার্ক jsben.ch/#/WqlIl আপনাকে এই চেকটি কীভাবে অর্জন করবেন তার সর্বাধিক সাধারণ উপায় সম্পর্কে একটি ওভারভিউ দেয়।
এস্কেপনেটস্কেপ

একটি দ্রুত কর্মক্ষেত্র, সাধারণত আমি যাই property.key = property.key || 'some default value', কেবলমাত্র যদি আমি চাবিটি এর কোনও মূল্য সহ বিদ্যমান থাকে
RGLSV

উত্তর:


4110

অপরিজ্ঞাত-নেসের জন্য চেক করা কোনও কী বিদ্যমান কিনা তা পরীক্ষা করার সঠিক উপায় নয়। কীটি বিদ্যমান থাকলে তবে মানটি আসলে undefinedকী হবে?

var obj = { key: undefined };
obj["key"] !== undefined // false, but the key exists!

পরিবর্তে আপনার inঅপারেটরটি ব্যবহার করা উচিত :

"key" in obj // true, regardless of the actual value

যদি আপনি কোনও কী কী না থাকলে তা পরীক্ষা করতে চান তবে প্রথম বন্ধনী ব্যবহার করতে ভুলবেন না:

!("key" in obj) // true if "key" doesn't exist in object
!"key" in obj   // ERROR!  Equivalent to "false in obj"

অথবা, যদি আপনি বিশেষত অবজেক্টের বৈশিষ্ট্যের বৈশিষ্ট্যগুলি পরীক্ষা করতে চান (এবং উত্তরাধিকারসূত্রে প্রাপ্ত বৈশিষ্ট্য নয়), ব্যবহার করুন hasOwnProperty:

obj.hasOwnProperty("key") // true

পদ্ধতি হয় মধ্যে কর্মক্ষমতা তুলনা করার জন্য in, hasOwnPropertyআর কী হয় undefined, এই দেখুন বেঞ্চমার্ক


83
ম্যানুয়ালি সংজ্ঞায়িত মান সহ একটি সম্পত্তি থাকা একেবারেই অর্থবোধ করে না। এটি সত্যিই একটি অক্সিমোরন হবে।
জোবার্ট

259
আমি নিশ্চিত যে সম্পত্তি থাকার জন্য ইচ্ছাকৃতভাবে সংজ্ঞায়িতভাবে সেট করার ক্ষেত্রে এমন কিছু মামলা রয়েছে।
এটেস গোরাল

168
বৈধ ব্যবহারের কেস: গেকো ১.৯.১ [ফায়ারফক্স ৩.৫] এর উইন্ডোঅনশ্যাচ-এর সম্পত্তি নেই। গেকো ১.৯.২ [ফায়ারফক্স ৩.6] এর এই সম্পত্তিটি অপরিজ্ঞাত (হ্যাশ পরিবর্তন না হওয়া পর্যন্ত) সেট করা আছে। হ্যাশ ইতিহাস বা ব্রাউজার সংস্করণ সনাক্ত করতে বৈশিষ্ট্যগুলির জন্য, অবশ্যই একটি উইন্ডো.হস ওউনপ্রোপার্টি ("অন্যাশচেঞ্জ") ব্যবহার করতে হবে;
সামগুডি

7
পিএইচপি তে একটি অনুরূপ সমস্যা বিদ্যমান যেখানে নাল == অস্তিত্ব নেই: স্ট্যাকওভারফ্লো.com / q / 418066 / 372654 এবং দুর্ভাগ্যক্রমে, নালটিরও সেখানে ব্যবহার রয়েছে।
হালিল üzgür

80
@ জোবার্ট যেহেতু কিছু আজেবাজে কথা বলার অর্থ এই নয় যে আপনি উত্পাদন কোডে এটির মুখোমুখি হবেন না। অনেক লাইব্রেরি রয়েছে যা অযৌক্তিক কাজ করে।
ক্র্যাশ ওয়ার্কস 10'14

297

দ্রুত উত্তর

জাভা স্ক্রিপ্ট অবজেক্টে বা অ্যারেতে একটি নির্দিষ্ট কী উপস্থিত আছে কিনা তা আমি কীভাবে চেক করব? যদি কোনও কী উপস্থিত না থাকে এবং আমি এটি অ্যাক্সেস করার চেষ্টা করি তবে এটি কী মিথ্যা ফিরে আসবে? নাকি ত্রুটি ছুড়ে মারবে?

(এসোসিয়েটিভ) অ্যারে স্টাইল বা অবজেক্ট স্টাইল ব্যবহার করে সরাসরি অনুপস্থিত সম্পত্তি অ্যাক্সেস করা একটি অনির্ধারিত ধ্রুবককে ফিরিয়ে দেবে ।

ধীর এবং নির্ভরযোগ্য মধ্যে অপারেটর এবং hasOwnProperty পদ্ধতি

লোকেরা ইতিমধ্যে এখানে উল্লেখ করেছে, আপনার কোনও "অপরিজ্ঞাত" ধ্রুবকের সাথে সম্পত্তির সাথে সম্পত্তি থাকতে পারে।

 var bizzareObj = {valid_key:  undefined};

সেক্ষেত্রে, আপনি ব্যবহার করতে হবে hasOwnProperty বা মধ্যে অপারেটর যদি চাবি সত্যিই আছে জানতে। তবে, তবে কী দামে?

তাই, আমি আপনাকে বলছি ...

মধ্যে অপারেটর এবং hasOwnProperty "পদ্ধতি" ব্যবহার জাভাস্ক্রিপ্ট সম্পত্তির বর্ণনাকারী প্রক্রিয়া (জাভা ভাষায় জাভা প্রতিফলন মতো) হয়।

http://www.ecma-international.org/ecma-262/5.1/#sec-8.10

সম্পত্তি বর্ণনাকারী প্রকারটি নামের সম্পত্তি বৈশিষ্ট্যগুলির কারসাজি এবং পুনঃসংশোধনকে ব্যাখ্যা করতে ব্যবহৃত হয়। সম্পত্তি বর্ণনাকারী টাইপের মানগুলি নামকৃত ক্ষেত্রগুলির সমন্বয়ে রেকর্ড করা হয় যেখানে প্রতিটি ক্ষেত্রের নাম একটি গুনের নাম এবং 8.6.1 তে উল্লিখিত হিসাবে এর মানটি একটি সম্পর্কিত বৈশিষ্ট্য মান। এছাড়াও, যে কোনও ক্ষেত্র উপস্থিত বা অনুপস্থিত থাকতে পারে।

অন্যদিকে, কোনও অবজেক্ট পদ্ধতি বা কী কল করা জাভাস্ক্রিপ্ট [[পান]] প্রক্রিয়াটি ব্যবহার করবে। এটাই এখন অনেক দ্রুত!

মাপকাঠি

http://jsperf.com/checking-if-a-key-exists-in-a-javascript-array

জেএস-এ কী অ্যাক্সেসের তুলনা করা

ব্যবহার মধ্যে অপারেটর
var result = "Impression" in array;

ফলাফল ছিল

12,931,832 ±0.21% ops/sec      92% slower 
HasOwnProperty ব্যবহার করা হচ্ছে
var result = array.hasOwnProperty("Impression")

ফলাফল ছিল

16,021,758 ±0.45% ops/sec     91% slower
সরাসরি উপাদানগুলিতে অ্যাক্সেস করা (বন্ধনী স্টাইল)
var result = array["Impression"] === undefined

ফলাফল ছিল

168,270,439 ±0.13 ops/sec     0.02% slower 
সরাসরি উপাদানগুলিতে অ্যাক্সেস করা (বস্তুর শৈলী)
var result = array.Impression  === undefined;

ফলাফল ছিল

168,303,172 ±0.20%     fastest

সম্পাদনা: কোনও সম্পত্তিকে undefinedমূল্য নির্ধারণের কারণ কী ?

এই প্রশ্ন আমার ধাঁধা। জাভাস্ক্রিপ্টে, এই জাতীয় সমস্যা এড়াতে অনুপস্থিত বস্তুর জন্য কমপক্ষে দুটি উল্লেখ রয়েছে: nullএবং undefined

nullআদিম মান যা কোনও বস্তুর মানের ইচ্ছাকৃত অনুপস্থিতি বা সংক্ষিপ্ত ভাষায়, মানটির নিশ্চিত অভাবকে উপস্থাপন করে। অন্যদিকে, undefinedঅজানা মান (সংজ্ঞায়িত নয়)। যদি এমন কোনও সম্পত্তি থাকে যা পরে যথাযথ মান সহ ব্যবহৃত হবে তবে nullপরিবর্তে ব্যবহারের রেফারেন্সটি বিবেচনা করুন undefinedকারণ প্রাথমিক মুহুর্তে সম্পত্তিটির কোনও মান অভাব হওয়ার বিষয়টি নিশ্চিত হয়ে গেছে।

তুলনা করা:

var a = {1: null}; 
console.log(a[1] === undefined); // output: false. I know the value at position 1 of a[] is absent and this was by design, i.e.:  the value is defined. 
console.log(a[0] === undefined); // output: true. I cannot say anything about a[0] value. In this case, the key 0 was not in a[].

পরামর্শ

undefinedমান সহ বস্তুগুলি এড়িয়ে চলুন । যখনই সম্ভব সরাসরি দেখুন এবং nullসম্পত্তি মানগুলি আরম্ভ করতে ব্যবহার করুন । অন্যথায়, ধীর inঅপারেটর বা hasOwnProperty()পদ্ধতি ব্যবহার করুন ।

সম্পাদনা: 12/04/2018 - অন্য কোনও ক্ষেত্রে অনুমোদিত নয়

লোকেরা যেমন মন্তব্য করেছে, জাভাস্ক্রিপ্ট ইঞ্জিনগুলির আধুনিক সংস্করণগুলি (ফায়ারফক্স ব্যতিক্রম সহ) অ্যাক্সেস বৈশিষ্ট্যের জন্য দৃষ্টিভঙ্গি পরিবর্তন করেছে। বর্তমান বাস্তবায়ন এই বিশেষ ক্ষেত্রে আগেরটির তুলনায় ধীর হলেও অ্যাক্সেস কী এবং অবজেক্টের মধ্যে পার্থক্য অবহেলাযোগ্য।


1
এই সমস্ত পদ্ধতি কি সমস্ত ব্যবহৃত ব্রাউজারগুলিতে গ্রহণযোগ্য, যেমন আই 8 +?
জাস্টিন

11
বেঞ্চমার্কিংয়ের জন্য +1। আপনাকে ধন্যবাদ, এটি হ'ল তথ্যটি আমি খুঁজে পেতে আশা করছিলাম। কোডটি লিখতে অবশ্যই দৃ strong় যুক্তি যা কখনই নির্ধারণ করে না বা কোনও কীটি অপরিশোধিত মানটি ধারণ করে বলে আশা করে না
টিজে কমপটন

আমি কী আগ্রহী ছিলাম কীভাবে অ্যান্ডসোর.জেএস এর তুলনা করেছে (), তাই আমি এটিকে jsperf ( সংস্করণ 11 ) এ যুক্ত করেছি। এটি ধীরে ধীরে রয়েছে এবং হ'ল ওজনপ্র্টি () এর সাথে এটি সক্রিয় হয়।
এমপাইসট

3
এর একটি কারন আমি একটি হ্যাশ মান undefined সেট হবে যে আমি আসলে হ্যাশ থেকে যে সম্পত্তি কী মুছে ফেলতে চেয়েছিলেন, কিন্তু delete hash[key]হয় তুলনায় অনেক ধীর hash[key] = undefined । অবশ্যই এক্ষেত্রে এটি inঅপারেটরের প্রয়োজনের জন্য আমার কোনও বোধগম্য নয়, তবে এটি "আমাদের সর্বদা অব্যক্ত মানের মান নির্ধারণ করা এড়াতে হবে" -এর প্রতিবিম্ব হিসাবে কাজ করে।
অ্যালান টম

1
@ হেসেইনইয়্যালি যেমন উল্লেখ করেছেন, আপনি যদি জাসস্পিফ লিঙ্কটি পরীক্ষা করেন তবে বেশিরভাগ ব্রাউজারের জন্য ভিন্ন ভিন্ন পদ্ধতির মধ্যে পারফরম্যান্স উল্লেখযোগ্যভাবে পরিবর্তিত হয়েছে যেহেতু এই উত্তরটি মূলত লেখা হয়েছিল। ফায়ারফক্স এমন কয়েকটিগুলির মধ্যে একটি যা এখনও অ্যারে বা অবজেক্ট পদ্ধতি ব্যবহার করে একটি উল্লেখযোগ্য সুবিধা পেয়েছে তবে অন্যান্য অনেক ব্রাউজারের জন্য পার্থক্য নগণ্য।
কেভিনমিক 16

144

এটি ফিরে আসবে undefined

var aa = {hello: "world"};
alert( aa["hello"] );      // popup box with "world"
alert( aa["goodbye"] );    // popup box with "undefined"

undefinedএকটি বিশেষ ধ্রুবক মান। সুতরাং আপনি যেমন বলতে পারেন

// note the three equal signs so that null won't be equal to undefined
if( aa["goodbye"] === undefined ) {
    // do something
}

হারিয়ে যাওয়া চাবিগুলি পরীক্ষা করার জন্য এটি সম্ভবত সেরা উপায়। তবে নীচের মন্তব্যে যেমন উল্লেখ করা হয়েছে, তাত্ত্বিকভাবে সম্ভব যে আপনি আসল মান থাকতে চান undefined। আমার কখনই এটি করার প্রয়োজন হয়নি এবং আমি কেন কখনও চাইব তা কোনও কারণ বলে ভাবতে পারি না তবে কেবলমাত্র সম্পূর্ণতার জন্য আপনি inঅপারেটরটি ব্যবহার করতে পারেন

// this works even if you have {"goodbye": undefined}
if( "goodbye" in aa ) {
    // do something
}

8
কীটি বিদ্যমান থাকলে তবে মানটি অপরিবর্তিত থাকে কি?
এটস গোলাল

13
অপরিজ্ঞাপিতের সাথে তুলনা করার সময় আপনার == এর পরিবর্তে === ব্যবহার করা উচিত, অন্যথায় নাল অপরিজ্ঞাপিতের সাথে সমান তুলনা করবে।
ম্যাথু ক্রামলে

10
এলি আপনার উত্তর সম্পূর্ণ সঠিক নয়। কারণ যাইহোক (এবং অবশ্যই এটি কখনই করা উচিত নয়) অপরিবর্তিত কোনও বিশেষ ধ্রুবক মান নয়। বস্তুত, এটা একটি সংরক্ষিত শব্দ নয় এবং আপনি এটি ওভাররাইট করতে পারেন এর উদাহরণস্বরূপ বলছি, দিন var undefined = 42;। অপরিবর্তিত প্রস জন্য পরীক্ষা করার সময় আপনার সর্বদা ব্যবহার করা উচিত ((typeof variable) === "undefined")
ssice

1
@ssice undefinedএকটি লিখনযোগ্য সম্পত্তি বৈশিষ্ট অনুযায়ী নয় ecma-international.org/ecma-262/5.1/#sec-15.1.1.3
therealrootuser

1
জাভাস্ক্রিপ্টের পূর্ববর্তী সংস্করণগুলিতে, 'অপরিজ্ঞাত' এবং 'NaN' এমন এক পরিবর্তনীয় পরিবর্তনশীল যা অন্য মানগুলি পুনরায় সংজ্ঞায়িত বা নির্ধারিত হতে পারে । এটি একটি খারাপ জিনিস ছিল। এটি ECMAScript 5 এ ঠিক করা হয়েছিল
জেকদেব

32

গৃহীত উত্তর বোঝায় অবজেক্ট । ব্যবহার থেকে সাবধান inঅপারেটর উপর এরে কী পরিবর্তে ডেটা দেখুন:

("true" in ["true", "false"])
// -> false (Because the keys of the above Array are actually 0 and 1)

একটি অ্যারে বিদ্যমান উপাদানগুলি পরীক্ষা করার জন্য: কোনও আইটেমটি জাভাস্ক্রিপ্ট অ্যারেতে রয়েছে কিনা তা সন্ধান করার সর্বোত্তম উপায়?


ভাল কথা, আপনাকে ধন্যবাদ। :)
লুকাশ সুসা

29
"key" in obj

সম্ভবত কেবলমাত্র বস্তুর বৈশিষ্ট্য মানগুলি যা অ্যারে কী থেকে খুব আলাদা তা পরীক্ষা করছে


ক্লাস প্রোটোটাইপ: ফাংশন এ () {}; এপ্রোটোটাইপ.বি = 2; ভার এ = নতুন এ (); এ সংজ্ঞায়িত একটি কীটির জন্যও এই কোডটি সত্য দেয়; তারপরে 'খ' সত্য। যদিও a.hasOwnProperty ('b') অবশ্যই মিথ্যা।
আলেকজান্ডার

24

কোনও সম্পত্তি জাভাস্ক্রিপ্ট অবজেক্টে উপস্থিত কিনা তা পরীক্ষা করার তিনটি উপায়:

  1. !! প্রজেক্টটি
    মানকে বুলে রূপান্তর করবে। 'মিথ্যা' মান ব্যতীত সকলের জন্য সত্য প্রদান করে
  2. আপত্তি অনুসারে 'দ্য প্রপার্টি'
    সম্পত্তিটি বিদ্যমান থাকলে সত্যই ফিরে আসবে, তার মূল্য নির্বিশেষে ( খালিও )
  3. জেজ.হসনপ্রোপার্টি ('দ্য প্রোপার্টি')
    প্রোটোটাইপ চেইনটি পরীক্ষা করে না। (যেহেতু সমস্ত বস্তুর 'টু স্ট্রিং' পদ্ধতি রয়েছে তাই 1 এবং 2 এর সত্য হবে, এবং 3 এতে মিথ্যা ফিরিয়ে দিতে পারে))

রেফারেন্স:

http://book.mixu.net/node/ch5.html


!! আপত্তি.প্রধানটি ব্যর্থ হয় যখন মানটি সংজ্ঞায়িত হয়। প্রাক্তন:var a = {a : undefined, b : null}; !!a.a **will return false**
এআরজুন

15

আপনি যদি আন্ডারস্কোর.জেএস লাইব্রেরি ব্যবহার করেন তবে অবজেক্ট / অ্যারে ক্রিয়াকলাপগুলি সহজ হয়ে যায়।

আপনার ক্ষেত্রে _.হ্যাসটি ব্যবহার করা যেতে পারে। উদাহরণ:

yourArray = {age: "10"}

_.has(yourArray, "age")

সত্য ফিরে

কিন্তু,

_.has(yourArray, "invalidKey")

মিথ্যা প্রত্যাবর্তন


15

উত্তর:

if ("key" in myObj)
{
    console.log("key exists!");
}
else
{
    console.log("key doesn't exist!");
}

ব্যাখ্যা:

inকী বস্তু যদি উপস্থিত থাকে অপারেটর চেক করবে। যদি মানটি অপরিবর্তিত ছিল কিনা তা আপনি পরীক্ষা করে দেখেন:, if (myObj["key"] === 'undefined')আপনি সমস্যাগুলিতে দৌড়াতে পারেন কারণ undefinedমান সহ আপনার বস্তুতে সম্ভবত একটি কী উপস্থিত থাকতে পারে ।

এই কারণে, প্রথমে inঅপারেটরটি ব্যবহার করা এবং তারপরে কীটির অভ্যন্তরে থাকা মানটির সাথে তুলনা করা ভাল practice


12

এখানে একটি সহায়ক ফাংশন আমি বেশ দরকারী বলে মনে করি

এটি keyExists(key, search)অবজেক্টস বা অ্যারেগুলির মধ্যে সহজেই কোনও কী অনুসন্ধান করার জন্য ব্যবহার করা যেতে পারে!

আপনি যে কীটি সন্ধান করতে চান তা কেবল এটি পাস করুন এবং আপনি এটি সন্ধান করতে চাইলে অবজেক্ট (বস্তু বা অ্যারে) সন্ধান করুন।

function keyExists(key, search) {
        if (!search || (search.constructor !== Array && search.constructor !== Object)) {
            return false;
        }
        for (var i = 0; i < search.length; i++) {
            if (search[i] === key) {
                return true;
            }
        }
        return key in search;
    }

// How to use it:
// Searching for keys in Arrays
console.log(keyExists('apple', ['apple', 'banana', 'orange'])); // true
console.log(keyExists('fruit', ['apple', 'banana', 'orange'])); // false

// Searching for keys in Objects
console.log(keyExists('age', {'name': 'Bill', 'age': 29 })); // true
console.log(keyExists('title', {'name': 'Jason', 'age': 29 })); // false

এটি বেশ নির্ভরযোগ্য এবং ক্রস ব্রাউজারে ভাল কাজ করে।


6
এটি কিছুটা বিভ্রান্ত বলে মনে হচ্ছে: প্রথমত, কোনও অ্যারে অনুসন্ধান করার সময় এই পদ্ধতিটি কোনও মূল নয়, একটি মানের জন্য যাচাই করে । দ্বিতীয়ত, যখন আপনি অন্তর্নির্মিত Array.indexOfপদ্ধতিটি ব্যবহার করতে পারেন তখন কেন এমন অ্যারে দিয়ে পুনরাবৃত্তি হবে ? (আপনি যদি কোনও মান সন্ধান করছেন, তা হ'ল)
নিক এফ

9

ভ্যানিলা জেএস

yourObjName.hasOwnProperty(key) : true ? false;

আপনি যদি পরীক্ষা করতে চান তবে es2015 এ অবজেক্টটির কমপক্ষে একটি সম্পত্তি রয়েছে কিনা

Object.keys(yourObjName).length : true ? false

7

ES6 সমাধান

ব্যবহার Array#someএবং Object.keys। এটা তোলে ফিরে আসবে সত্য প্রদত্ত কী বস্তু বা যদি উপস্থিত থাকে মিথ্যা যদি এটা না।

var obj = {foo: 'one', bar: 'two'};
    
function isKeyInObject(obj, key) {
    var res = Object.keys(obj).some(v => v == key);
    console.log(res);
}

isKeyInObject(obj, 'foo');
isKeyInObject(obj, 'something');

এক লাইনের উদাহরণ।

console.log(Object.keys({foo: 'one', bar: 'two'}).some(v => v == 'foo'));


1
এটি অবজেক্টের অগণনীয় বৈশিষ্ট্যের জন্য ব্যর্থ হবে।
সিড

@ সিড আমাকে কিছু উদাহরণ দিন।
সদয় ব্যবহারকারী

আপনি এখানে যান। যোশুয়া = {নাম: 'জোশুয়া', ঠিকানা: 'লন্ডন'}; অবজেক্ট.ডিফাইনপ্রোপার্টি (জোশুয়া, 'ইসমারিড', {মান: সত্য, গণনাযোগ্য: মিথ্যা}); কনসোল.লগ (অবজেক্ট.কিজ (জোশুয়া) এ 'ম্যারেড'
সিড

আমি আমার বিষয়টি আপনার সমাধান প্রয়োগ করছি। এটি প্রথম আউটপুট জন্য সত্য দেওয়া উচিত নয়? কনসোল.লগ (অবজেক্ট.কিজ (জোশুয়া) .সোম (v => ভি == 'ইসমারিড')); console.log (joshua.isMarried);
সিড

1
আমি দুঃখিত তবে আপনি কি দ্বিতীয় কনসোল স্টেটমেন্টের আউটপুট পরীক্ষা করেছেন? Object.defineProperty ডট স্বরলিপি ব্যবহার করে সম্পত্তি সেট করার সমান।
সিড

6

আমরা ব্যবহার করতে পারি - hasOwnProperty.call(obj, key);

Underscore.js উপায় -

if(_.has(this.options, 'login')){
  //key 'login' exists in this.options 
}

_.has = function(obj, key) {
  return hasOwnProperty.call(obj, key);
};

5

চেক করার সবচেয়ে সহজ উপায়

"key" in object

উদাহরণ স্বরূপ:

var obj = {
  a: 1,
  b: 2,
}
"a" in obj // true
"c" in obj // false

রিটার্ন মানকে সত্য হিসাবে বোঝানো হয় যে বস্তুটিতে কীটি বিদ্যমান in


4

যাঁরা lodashতাদের প্রকল্পে অন্তর্ভুক্ত করেছেন তাদের জন্য:
এখানে একটি ল্যাডাশ _.get পদ্ধতি রয়েছে যা "গভীর" কীগুলি পাওয়ার চেষ্টা করে:

বস্তুর পথে মূল্য পায় G যদি সমাধান করা মানটি অপরিবর্তিত থাকে তবে ডিফল্টভ্যালু তার জায়গায় ফিরে আসে।

var object = { 'a': [{ 'b': { 'c': 3 } }] };

console.log(
  _.get(object, 'a[0].b.c'),           // => 3
  _.get(object, ['a', '0', 'b', 'c']), // => 3
  _.get(object, 'a.b.c'),              // => undefined 
  _.get(object, 'a.b.c', 'default')    // => 'default'
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>


এটি কার্যকরভাবে যদি চাবিকাঠিটি গভীর হয় তবে এটি সংজ্ঞায়িত করা হয়েছে এবং কোনও ত্রুটি ফেলবে না যা যদি আপনার কীটি সংজ্ঞায়িত না করা হয় তবে আপনার প্রোগ্রামের প্রবাহকে ক্ষতি করতে পারে।


4

এটি কোনও কী উপস্থিত রয়েছে কিনা তা অগত্যা যাচাই করে না তবে এটি কোনও মানের সত্যতা পরীক্ষা করে। যা undefinedএবং nullঅধীনে পড়ে।

Boolean(obj.foo)

এই সমাধানটি আমার পক্ষে সবচেয়ে ভাল কাজ করে কারণ আমি টাইপস্ক্রিপ্ট ব্যবহার করি, এবং এর মতো স্ট্রিং ব্যবহার করে 'foo' in objবা obj.hasOwnProperty('foo') কোনও কী উপস্থিত রয়েছে কি না তা আমাকে ইন্টেলিজেন্স সরবরাহ করে না তা যাচাই করার জন্য।


3

আপনি যদি কোনও অবজেক্টের যে কোনও গভীরতায় কোনও চাবি পরীক্ষা করতে চান এবং মিথ্যা মানগুলির জন্য অ্যাকাউন্ট চান তবে কোনও ইউটিলিটি ফাংশনের জন্য এই লাইনটি বিবেচনা করুন:

var keyExistsOn = (o, k) => k.split(".").reduce((a, c) => a.hasOwnProperty(c) ? a[c] || 1 : false, Object.assign({}, o)) === false ? false : true;

ফলাফল

var obj = {
    test: "",
    locals: {
        test: "",
        test2: false,
        test3: NaN,
        test4: 0,
        test5: undefined,
        auth: {
            user: "hw"
        }
    }
}

keyExistsOn(obj, "")
> false
keyExistsOn(obj, "locals.test")
> true
keyExistsOn(obj, "locals.test2")
> true
keyExistsOn(obj, "locals.test3")
> true
keyExistsOn(obj, "locals.test4")
> true
keyExistsOn(obj, "locals.test5")
> true
keyExistsOn(obj, "sdsdf")
false
keyExistsOn(obj, "sdsdf.rtsd")
false
keyExistsOn(obj, "sdsdf.234d")
false
keyExistsOn(obj, "2134.sdsdf.234d")
false
keyExistsOn(obj, "locals")
true
keyExistsOn(obj, "locals.")
false
keyExistsOn(obj, "locals.auth")
true
keyExistsOn(obj, "locals.autht")
false
keyExistsOn(obj, "locals.auth.")
false
keyExistsOn(obj, "locals.auth.user")
true
keyExistsOn(obj, "locals.auth.userr")
false
keyExistsOn(obj, "locals.auth.user.")
false
keyExistsOn(obj, "locals.auth.user")
true

এই এনপিএম প্যাকেজটিও দেখুন: https://www.npmjs.com/package/has- ਦੀਪ- মূল্য


3
const object1 = {
  a: 'something',
  b: 'something',
  c: 'something'
};

const key = 's';

// Object.keys(object1) will return array of the object keys ['a', 'b', 'c']

Object.keys(object1).indexOf(key) === -1 ? 'the key is not there' : 'yep the key is exist';

3

'অ্যারে' বিশ্বে আমরা সূচিগুলিকে কিছু ধরণের কী হিসাবে দেখতে পারি। inঅপারেটরটি যা অবাক করে তোলে (যা বস্তুর পক্ষে ভাল পছন্দ) এটি অ্যারেগুলির সাথেও কাজ করে। অ-অস্তিত্বের কীটির জন্য ফিরে আসা মানundefined

let arr = ["a","b","c"]; // we have indexes: 0,1,2
delete arr[1];           // set 'empty' at index 1
arr.pop();               // remove last item

console.log(0 in arr,  arr[0]);
console.log(1 in arr,  arr[1]);
console.log(2 in arr,  arr[2]);


2

yourArray.indexOf (yourArrayKeyName)> -1

fruit = ['apple', 'grapes', 'banana']

fruit.indexOf('apple') > -1

সত্য


fruit = ['apple', 'grapes', 'banana']

fruit.indexOf('apple1') > -1

মিথ্যা


0

এই উদাহরণটি ডিফেরেন্ট উপায়গুলির মধ্যে পার্থক্য প্রদর্শন করতে পারে। আশা করি এটি আপনার প্রয়োজনের জন্য সঠিকটি বাছাই করতে আপনাকে সহায়তা করবে:

// Lets create object `a` using create function `A`
function A(){};
A.prototype.onProtDef=2;
A.prototype.onProtUndef=undefined;
var a=new A();
a.ownProp = 3;
a.ownPropUndef = undefined;

// Let's try different methods:

a.onProtDef; // 2
a.onProtUndef; // undefined
a.ownProp; // 3
a.ownPropUndef; // undefined
a.whatEver; // undefined
a.valueOf; // ƒ valueOf() { [native code] }

a.hasOwnProperty('onProtDef'); // false
a.hasOwnProperty('onProtUndef'); // false
a.hasOwnProperty('ownProp'); // true
a.hasOwnProperty('ownPropUndef'); // true
a.hasOwnProperty('whatEver'); // false
a.hasOwnProperty('valueOf'); // false

'onProtDef' in a; // true
'onProtUndef' in a; // true
'ownProp' in a; // true
'ownPropUndef' in a; // true
'whatEver' in a; // false
'valueOf' in a; // true (on the prototype chain - Object.valueOf)

Object.keys(a); // ["ownProp", "ownPropUndef"]

-1

জাভাস্ক্রিপ্ট ডিস্ট্রাকচার সহ নতুন দুর্দান্ত সমাধান :

let obj = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3",
};

let {key1, key2, key3, key4} = obj;

// key1 = "value1"
// key2 = "value2"
// key3 = "value3"
// key4 = undefined

// Can easily use `if` here on key4
if(!key4) { console.log("key not present"); } // Key not present

জাভাস্ক্রিপ্ট ডেস্ট্রাকচারিং এর অন্যান্য ব্যবহার পরীক্ষা করে দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.