Bir JavaScript nesnesinde bir anahtar olup olmad─▒─č─▒n─▒ kontrol etme


Al─▒nan cevaba git


Bir JavaScript nesnesinde veya dizisinde belirli bir anahtar─▒n olup olmad─▒─č─▒n─▒ nas─▒l kontrol ederim?

Bir anahtar yoksa ve eri┼čmeye ├žal─▒┼č─▒rsam yanl─▒┼č d├Ând├╝r├╝r m├╝? Ya da bir hata atmak?


2698









Cevap say─▒s─▒n─▒ say: 20






Belirsizli─či kontrol etmek, bir anahtar olup olmad─▒─č─▒n─▒ test etmenin do─čru bir yolu de─čildir. Anahtar varsa, ancak de─čer asl─▒nda ise undefined ?

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

Bunun yerine in operat├Âr├╝ kullanmal─▒s─▒n─▒z :

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

Bir anahtar olup olmad─▒─č─▒n─▒ kontrol etmek istiyorsan─▒z, parantez kullanmay─▒ unutmay─▒n:

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

Veya, ├Âzellikle nesne ├Ârne─činin ├Âzelliklerini (ve miras al─▒nan ├Âzellikleri de─čil) test etmek istiyorsan─▒z, ┼čunlar─▒ kullan─▒n hasOwnProperty :

 obj.hasOwnProperty("key") // true
 

Hangi y├Ântem aras─▒ndaki performans kar┼č─▒la┼čt─▒rmas─▒ i├žin in , hasOwnProperty ve anahtar undefined , bunu g├Ârmek kriter


3721







H─▒zl─▒ cevap

Bir JavaScript nesnesinde veya dizisinde belirli bir anahtar─▒n olup olmad─▒─č─▒n─▒ nas─▒l kontrol ederim? Bir anahtar yoksa ve eri┼čmeye ├žal─▒┼č─▒rsam yanl─▒┼č d├Ând├╝r├╝r m├╝? Ya da bir hata atmak?

(Birle┼čtirici) dizi stilini veya nesne stilini kullanarak do─črudan eksik bir ├Âzelli─če eri┼čmek tan─▒ms─▒z bir sabit d├Ând├╝r├╝r .

Yava┼č ve g├╝venilir olarak operat├Âr ve hasOwnProperty y├Ântemi

─░nsanlar burada daha ├Ânce belirttikleri gibi, "tan─▒ms─▒z" bir sabitle ili┼čkili ├Âzelliklere sahip bir nesneye sahip olabilirsiniz.

  var bizzareObj = {valid_key:  undefined};
 

Bu durumda, kullanmak zorunda kalacak hasOwnProperty veya i├žinde anahtar ger├žekten olup olmad─▒─č─▒n─▒ bilmek operat├Âr├╝. Ama, ama hangi fiyata?

bu y├╝zden sana s├Âyl├╝yorum ...

i├žinde operat├Âr ve hasOwnProperty (Java dilinde Java yans─▒mas─▒ benzer) JavaScript M├╝lkiyet Tan─▒mlay─▒c─▒ mekanizmas─▒n─▒ kullan─▒n "y├Ântemleri" dir.

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

├ľzellik Tan─▒mlay─▒c─▒ tipi, adland─▒r─▒lm─▒┼č ├Âzellik niteliklerinin manip├╝lasyonunu ve yeniden tan─▒mlanmas─▒n─▒ a├ž─▒klamak i├žin kullan─▒l─▒r. ├ľzellik Tan─▒mlay─▒c─▒ t├╝r├╝n├╝n de─čerleri, her alan─▒n ad─▒n─▒n bir ├Âzellik ad─▒ oldu─ču ve de─čerinin, 8.6.1'de belirtilen ┼čekilde kar┼č─▒l─▒k gelen bir ├Âzellik de─čeri oldu─ču adland─▒r─▒lm─▒┼č alanlardan olu┼čan kay─▒tlard─▒r. Ek olarak, herhangi bir alan mevcut olabilir veya olmayabilir.

├ľte yandan, bir nesne y├Ântemini veya anahtar─▒n─▒ ├ža─č─▒rmak Javascript [[Get]] mekanizmas─▒n─▒ kullanacakt─▒r. Bu ├žok daha h─▒zl─▒!

k─▒yaslama

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


JSÔÇÖdeki anahtar eri┼čimini kar┼č─▒la┼čt─▒rma

.

Kullan─▒lmas─▒ halinde operat├Âr├╝
 var result = "Impression" in array;
 

Sonu├ž oldu

 12,931,832 ┬▒0.21% ops/sec      92% slower 
 
HasOwnProperty kullanarak
 var result = array.hasOwnProperty("Impression")
 

Sonu├ž oldu

 16,021,758 ┬▒0.45% ops/sec     91% slower
 
├ľ─čelere do─črudan eri┼čme (parantez stili)
 var result = array["Impression"] === undefined
 

Sonu├ž oldu

 168,270,439 ┬▒0.13 ops/sec     0.02% slower 
 
├ľ─čelere do─črudan eri┼čme (nesne stili)
 var result = array.Impression  === undefined;
 

Sonu├ž oldu

 168,303,172 ┬▒0.20%     fastest
 

EDIT: Bir ├Âzelli─če undefined de─čer ataman─▒n nedeni nedir ?

Bu soru beni ┼ča┼č─▒rt─▒yor. Javascript'te, bunun gibi sorunlardan ka├ž─▒nmak i├žin eksik nesneler i├žin en az iki referans vard─▒r: null ve undefined .

null herhangi bir nesne de─čerinin kas─▒tl─▒ yoklu─čunu temsil eden ilkel de─čerdir, ya da k─▒sa bir ifadeyle, do─črulanm─▒┼č de─čer eksikli─či. ├ľte yandan, undefined bilinmeyen bir de─čerdir (tan─▒mlanmam─▒┼č). Daha sonra uygun bir de─čerle kullan─▒lacak bir ├Âzellik varsa , ilk andaki ├Âzelli─čin bir de─čerden yoksun oldu─ču do─čruland─▒─č─▒ndan , null bunun yerine referans─▒ kullan─▒n . undefined

Kar┼č─▒la┼čt─▒rmak:

 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[].
 

├ľ─č├╝t vermek

De─čerli nesnelerden ka├ž─▒n─▒n undefined . M├╝mk├╝n oldu─čunda do─črudan kontrol edin ve null ├Âzellik de─čerlerini ba┼člatmak i├žin kullan─▒n . Aksi takdirde, yava┼č in operat├Âr├╝ veya hasOwnProperty() y├Ântemi kullan─▒n.

ED─░T: 12.04.2018 - HERHANG─░ B─░R ─░LG─░L─░ DE─×─░L

─░nsanlar─▒n yorumlad─▒─č─▒ gibi, Javascript motorlar─▒n─▒n modern versiyonlar─▒ (firefox istisnas─▒yla) eri┼čim ├Âzelliklerine olan yakla┼č─▒m─▒ de─či┼čtirdi. Mevcut uygulama bu ├Âzel durum i├žin bir ├Âncekinden daha yava┼čt─▒r, ancak eri┼čim anahtar─▒ ile nesne aras─▒ndaki fark ihmal edilebilir.


270







Geri d├Ânecek undefined .

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

undefined ├Âzel bir sabit de─čerdir. Yani, ├Ârne─čin s├Âyleyebilirsin

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

Bu muhtemelen eksik anahtarlar─▒ kontrol etmenin en iyi yoludur. Ancak, a┼ča─č─▒daki yorumda da belirtildi─či gibi, ger├žek de─čerin olmas─▒n─▒ istemek teorik olarak m├╝mk├╝nd├╝r undefined . Bunu hi├žbir zaman yapmad─▒m ve neden istedi─čimi bilmedi─čim bir neden d├╝┼č├╝nemiyorum, ancak sadece tamamlama u─čruna in operat├Âr├╝ kullanabilirsiniz.

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

130







Kabul edilen cevap Nesne anlam─▒na gelir . Anahtarlar yerine veri bulmak i├žin Array ├╝zerinde in i┼čleci kullanmaya dikkat edin :https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

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

Bir dizideki mevcut ├Â─čeleri test etmek i├žin: Bir ├Â─čenin JavaScript dizisinde olup olmad─▒─č─▒n─▒ bulman─▒n en iyi yolu?


28







 "key" in obj
 

Muhtemelen dizi tu┼člar─▒ndan ├žok farkl─▒ olan nesne ├Âzellik de─čerlerini test etmek olas─▒d─▒r


23







Bir ├Âzelli─čin bir javascript nesnesinde olup olmad─▒─č─▒n─▒ kontrol etmenin ├╝├ž yolu:

  1. !! obj.theProperty
    De─čeri boole d├Ân├╝┼čt├╝r├╝r. 'false' de─čeri d─▒┼č─▒nda herkes i├žin TRUE de─čerini d├Ând├╝r├╝r
  2. objede 'Property'
    ├Âzelli─či, de─čeri ne olursa olsun (bo┼č olsa bile)
  3. obj.hasOwnProperty ('TheProperty')
    Prototip zincirini kontrol etmez. (t├╝m nesneler 'toString' y├Ântemine sahip oldu─čundan, 1 ve 2 do─čru olarak geri d├Ânerken, 3 ├╝zerinde yanl─▒┼č d├Ând├╝r├╝r.)

Referans:

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


21







Underscore.js k├╝t├╝phanesini kullan─▒yorsan─▒z, nesne / dizi i┼člemleri basitle┼čir.

Senin durumunda _.has y├Ântemi kullan─▒labilir. ├ľrnek:

 yourArray = {age: "10"}

_.has(yourArray, "age")
 

do─čru d├Ând├╝r├╝r

Fakat,

 _.has(yourArray, "invalidKey")
 

false d├Ând├╝r├╝r


13







Cevap:

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

A├ž─▒klama:

in Anahtar nesneyi varsa operat├Âr kontrol edecektir. De─čerin tan─▒ms─▒z olup olmad─▒─č─▒n─▒ kontrol ettiyseniz: if (myObj["key"] === 'undefined') sorunla kar┼č─▒la┼čabilirsiniz, ├ž├╝nk├╝ nesnenizde undefined de─čere sahip bir anahtar olabilir .

Bu nedenle, ├Ânce in operat├Âr├╝ kullanmak ve daha sonra var oldu─čunu bildikten sonra anahtar─▒n i├žindeki de─čeri kar┼č─▒la┼čt─▒rmak daha iyi bir uygulamad─▒r .


13







─░┼čte olduk├ža faydal─▒ buldu─čum bir yard─▒mc─▒ fonksiyon

Bu keyExists(key, search) kolayca nesneler veya diziler i├žinde bir anahtar aramak i├žin kullan─▒labilir!

Sadece bulmak istedi─činiz anahtar─▒ iletin ve bulmak istedi─činiz nesneyi (nesneyi veya diziyi) aray─▒n.

 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 

Olduk├ža g├╝venilir ve taray─▒c─▒lar aras─▒ iyi ├žal─▒┼č─▒yor.


9







vanila js

 yourObjName.hasOwnProperty(key) : true ? false;
 

Es2015'te nesnenin en az bir ├Âzelli─či olup olmad─▒─č─▒n─▒ kontrol etmek istiyorsan─▒z

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

7







ES6 ├ž├Âz├╝m├╝

Array#some ve kullanarak Object.keys . Bu d├Ânecektir ger├žek verilen anahtar nesne veya mevcutsa FALSE bunlar─▒ yapmazsa.

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

Tek sat─▒rl─▒k ├Ârnek

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


5







Kullanabiliriz - hasOwnProperty.call(obj, key);

The undercore.js yolu -

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

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

4







lodash Projelerine dahil olanlar i├žin : "derin" anahtarlar almaya ├žal─▒┼čan
bir lodash _.get y├Ântemi var:

Nesnenin yolundaki de─čeri al─▒r. ├ç├Âz├╝nen de─čer tan─▒ms─▒zsa, defaultValue yerine d├Ând├╝r├╝l├╝r.

 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> 


Bu anahtar, ancak e─čer etkili bir ┼čekilde kontrol edecektir derin , tan─▒mlan─▒r ve olmayacak o anahtar tan─▒ml─▒ de─čilse program─▒n ak─▒┼č─▒n─▒ zedeleyebilecek bir hata atmak.


2







Kontrol etmenin en kolay yolu

 "key" in object
 

├ľrne─čin:

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

True olarak d├Ân├╝┼č de─čeri , anahtar─▒n nesnede bulundu─čunu belirtir.


2







Bir nesnede herhangi bir derinlikte bir anahtar olup olmad─▒─č─▒n─▒ kontrol etmek ve falsey de─čerlerini hesaplamak istiyorsan─▒z, bir yard─▒mc─▒ i┼člev i├žin bu sat─▒r─▒ g├Âz ├Ân├╝nde bulundurun:

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

Sonu├žlar

 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
 

Ayr─▒ca bu NPM paketine bak─▒n─▒z: https://www.npmjs.com/package/has-deep-value


1


2018-09-07





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

1







Bu mutlaka bir anahtar olup olmad─▒─č─▒n─▒ kontrol ederken, bir de─čerin do─črulu─čunu kontrol eder. Hangi undefined ve null alt─▒na.

Boolean(obj.foo)

Bu ├ž├Âz├╝m benim i├žin en iyisidir, ├ž├╝nk├╝ ben typcript kullan─▒yorum ve bunun gibi 'foo' in obj ya da obj.hasOwnProperty('foo') bir anahtar─▒n var olup olmad─▒─č─▒n─▒ kontrol etmek i├žin bana intellisense sa─člay─▒p sa─člamad─▒─č─▒n─▒ kontrol etmek.


0







Bu ├Ârnek, farkl─▒ yollar aras─▒ndaki farklar─▒ g├Âsterebilir. Umar─▒m ihtiya├žlar─▒n─▒z i├žin do─čru olan─▒ se├žmenize yard─▒mc─▒ olur:

 // 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"]
 

0







yourArray.indexOf (yourArrayKeyName)> -1

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

fruit.indexOf('apple') > -1
 

do─čru


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

fruit.indexOf('apple1') > -1
 

yanl─▒┼č


0







JavaScript Destructuring ile yeni harika bir ├ž├Âz├╝m :

 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
 

JavaScript Destructuring'─▒n di─čer kullan─▒m─▒n─▒ kontrol ethttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment


-1



─░lgili yay─▒nlar


Eleman─▒n jQuery'de [duplicate] olup olmad─▒─č─▒n─▒ kontrol edin

SQL Server'da tablonun olup olmad─▒─č─▒n─▒ kontrol edin

JavaScript'te fonksiyon olup olmad─▒─č─▒n─▒ nas─▒l kontrol edebilirim?

├ľ─čenin g├Âr├╝n├╝r DOMÔÇÖda olup olmad─▒─č─▒ nas─▒l kontrol edilir?

Dosyan─▒n jQuery'de veya salt JavaScript'te olup olmad─▒─č─▒n─▒ nas─▒l kontrol ederim?

Postgres dizisinde de─čer olup olmad─▒─č─▒n─▒ kontrol edin

Bir kabuk komut dosyas─▒nda komut olup olmad─▒─č─▒n─▒ kontrol etme? [├žift]

PostgreSQL'de sat─▒r olup olmad─▒─č─▒n─▒ en h─▒zl─▒ ┼čekilde kontrol edin

Anahtar─▒n NameValueCollection'da olup olmad─▒─č─▒n─▒ kontrol edin

Makefile'da dosya olup olmad─▒─č─▒n─▒ nas─▒l kontrol edebilirim, b├Âylece onu silebilirim?

Etiketle ilgili di─čer sorular [javascript]


CSS calc () i┼člevinde Sass De─či┼čkeni

─░k elementinin rengini de─či┼čtirme

SQL Server Management Studio 2012'deki otomatik art─▒┼č birincil anahtar─▒

__Getattr__ vs __getattribute__ aras─▒ndaki fark

Birisi JavascriptÔÇÖteki dolar i┼čaretini a├ž─▒klayabilir mi?

Javascript .map dosyalar─▒ - javascript kaynak haritalar─▒

Dosya ad-ad─▒n─▒ yolsuz ve bash olarak ├ž─▒kart─▒n [├žo─čalt]

RESTful API'de ├žoktan ├žo─ča ili┼čkiler nas─▒l ele al─▒n─▒r?

.NET HashTable Vs Dictionary - S├Âzl├╝k h─▒zl─▒ olabilir mi?

Ge├žerli ├ža─čr─▒ y─▒─č─▒n─▒n─▒ Python kodundaki bir y├Ântemden yazd─▒r