JavaScript nesnesinin uzunlu─ču


Al─▒nan cevaba git


Bir JavaScript nesnem var, bu nesnenin uzunlu─čunu elde etmek i├žin yerle┼čik veya kabul edilmi┼č bir en iyi uygulama yolu var m─▒?

 var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
 

2195









Cevap say─▒s─▒n─▒ say: 30






En sa─člam cevap (yani, en az hataya neden olurken yapmaya ├žal─▒┼čt─▒─č─▒n─▒z ┼čeyin amac─▒n─▒ yakalayan):

 Object.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};

// Get the size of an object
var size = Object.size(myObj);
 

JavaScript'te, Object.prototype'e bir ┼čey eklemeyece─činiz bir t├╝r kural vard─▒r , ├ž├╝nk├╝ ├že┼čitli k├╝t├╝phanelerdeki say─▒lar─▒ k─▒rabilir. Bununla birlikte, Nesneye y├Ântemler eklemek genellikle g├╝venlidir.


─░┼čte 2016 itibariyle bir g├╝ncelleme ve ES5 ve ├Âtesinde yayg─▒n bir da─č─▒t─▒m . IE9 + ve di─čer t├╝m modern ES5 + ├Âzellikli taray─▒c─▒lar i├žin, Object.keys() yukar─▒daki kodun aynen b├Âyle olmas─▒ i├žin kullanabilirsiniz.

 var size = Object.keys(myObj).length;
 

Bu, Object.keys() ┼ču anda yerle┼čik oldu─čundan , mevcut hi├žbir prototipi de─či┼čtirmek zorunda de─čildir .

D├╝zenleme : Nesneler, Object.key y├Ântemi ile d├Ând├╝r├╝lemeyen sembolik ├Âzelliklere sahip olabilir. Yani cevap onlardan bahsetmeden eksik kal─▒r.

Nesne ├Âzellikleri i├žin benzersiz tan─▒mlay─▒c─▒lar olu┼čturmak ├╝zere dile sembol t├╝r├╝ eklendi. Symbol t├╝r├╝n├╝n ana yarar─▒, ├╝zerine yazmalar─▒n ├Ânlenmesidir.

Object.keys veya Object.getOwnPropertyNames sembolik ├Âzellikler i├žin ├žal─▒┼čmaz. Onlar─▒ iade etmek i├žin kullanman─▒z gerekir Object.getOwnPropertySymbols .

 var person = {
  [Symbol('name')]: 'John Doe',
  [Symbol('age')]: 33,
  "occupation": "Programmer"
};

const propOwn = Object.getOwnPropertyNames(person);
console.log(propOwn.length); // 1

let propSymb = Object.getOwnPropertySymbols(person);
console.log(propSymb.length); // 2
 

2420


2008-08-09





hasOwnProperty ├çekler i├žin endi┼čelenmenize gerek olmad─▒─č─▒n─▒ biliyorsan─▒z, bunu ├žok basit bir ┼čekilde yapabilirsiniz:

 Object.keys(myArray).length
 

1614







G├╝ncelleme : Underscore.js kullan─▒yorsan─▒z (├Ânerilir, hafif!), Sonra yapabilirsiniz

 _.size({one : 1, two : 2, three : 3});
=> 3
 

De─čilse ve ne sebeple olursa olsun Object ├Âzellikleriyle u─čra┼čmak istemezseniz ve zaten jQuery kullan─▒yorsan─▒z, bir eklentiye e┼čit olarak eri┼čilebilir:

 $.assocArraySize = function(obj) {
    // http://stackoverflow.com/a/6700/11236
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};
 

276







─░┼čte en taray─▒c─▒lar aras─▒ ├ž├Âz├╝m.

Bu kabul edilmi┼č cevaptan daha iyidir, ├ž├╝nk├╝ varsa yerel Object.keys kullan─▒r. Bu nedenle, t├╝m modern taray─▒c─▒lar i├žin en h─▒zl─▒ olan─▒d─▒r.

 if (!Object.keys) {
    Object.keys = function (obj) {
        var arr = [],
            key;
        for (key in obj) {
            if (obj.hasOwnProperty(key)) {
                arr.push(key);
            }
        }
        return arr;
    };
}

Object.keys(obj).length;
 

53


2013-09-01





Ben bir JavaScript uzman─▒ de─čilim, ancak Object'in uzunlu─ču y├Ântemi olmad─▒─č─▒ndan ├Â─čeleri dola┼čman─▒z ve bunlar─▒ sayman─▒z gerekecek gibi g├Âr├╝n├╝yor:

 var element_count = 0;
for (e in myArray) {  if (myArray.hasOwnProperty(e)) element_count++; }
 

@ palmsey: OP'ye adaletli olarak, JavaScript dok├╝mantasyonu a├ž─▒k├ža a├ž─▒k├ža Object t├╝r├╝ndeki de─či┼čkenleri bu ┼čekilde "ili┼čkisel diziler" olarak kullanmay─▒ belirtir.


34


2008-08-07





En basit olan─▒

 Object.keys(myObject).length
 

32







Bu y├Ântem, t├╝m nesnenizin ├Âzellik adlar─▒n─▒ bir diziye al─▒r, b├Âylece nesnenizin tu┼člar─▒n─▒n uzunlu─čuna e┼čit olan dizinin uzunlu─čunu alabilirsiniz.

 Object.getOwnPropertyNames({"hi":"Hi","msg":"Message"}).length; // => 2
 

30







Prototip veya di─čer kodlarla u─čra┼čmamak i├žin kendi nesnenizi olu┼čturabilir ve geni┼čletebilirsiniz:

 function Hash(){
    var length=0;
    this.add = function(key, val){
         if(this[key] == undefined)
         {
           length++;
         }
         this[key]=val;
    }; 
    this.length = function(){
        return length;
    };
}

myArray = new Hash();
myArray.add("lastname", "Simpson");
myArray.add("age", 21);
alert(myArray.length()); // will alert 2
 

Her zaman add y├Ântemini kullan─▒rsan─▒z, uzunluk ├Âzelli─či do─čru olacakt─▒r. Siz veya ba┼čkalar─▒n─▒n kullanmay─▒ unutmas─▒ndan endi┼čeleniyorsan─▒z, di─čerlerinin de uzunluk y├Ântemine g├Ânderdi─či m├╝lk sayac─▒n─▒ ekleyebilirsiniz.

Elbette, y├Ântemlerin ├╝zerine her zaman yazabilirsin. Ancak yapsan─▒z bile, kodunuz muhtemelen hatayla hata ay─▒klamay─▒ kolayla┼čt─▒racak ┼čekilde ba┼čar─▒s─▒z olur. ;)


24







─░┼čte m├╝lk├╝n prototip zincirinde olmad─▒─č─▒n─▒ kontrol etmeyi unutmay─▒n ve unutmay─▒n:

 var element_count = 0;
for(var e in myArray)
    if(myArray.hasOwnProperty(e))
        element_count++;
 

19







Bunu almak i├žin basit├že ┼čunu kullan─▒n length :

 Object.keys(myObject).length
 

18







─░┼čte sadece daha modern taray─▒c─▒larda ├žal─▒┼čacak tamamen farkl─▒ bir ├ž├Âz├╝m (IE9 +, Chrome, Firefox 4+, Opera 11.60+, Safari 5.1+)

JsFiddle'─▒ g├Âr├╝nhttp://jsfiddle.net/QHDt7/

Associative Array s─▒n─▒f─▒n─▒z─▒ ayarlay─▒n

 /**
 * @constructor
 */
AssociativeArray = function () {};

// Make the length property work
Object.defineProperty(AssociativeArray.prototype, "length", {
    get: function () {
        var count = 0;
        for (var key in this) {
            if (this.hasOwnProperty(key))
                count++;
        }
        return count;
    }
});
 

┼×imdi bu kodu a┼ča─č─▒daki gibi kullanabilirsiniz ...

 var a1 = new AssociativeArray();
a1["prop1"] = "test";
a1["prop2"] = 1234;
a1["prop3"] = "something else";
alert("Length of array is " + a1.length);
 

16


2013-08-02





Baz─▒ durumlarda, boyutu yaln─▒zca ayr─▒ bir de─či┼čkende saklamak daha iyidir. ├ľzellikle diziye tek bir yerden bir eleman eklerseniz ve boyutu kolayca art─▒rabilirseniz. S─▒k s─▒k boyutunu kontrol etmeniz gerekirse, ├žok daha h─▒zl─▒ bir ┼čekilde ├žal─▒┼č─▒r.


15







kullan─▒n:

 var myArray = new Object();
myArray["firstname"] = "Gareth";
myArray["lastname"] = "Simpson";
myArray["age"] = 21;
obj = Object.keys(myArray).length;
console.log(obj) 


15







@ palmsey: OP'ye adaletli olarak, javascript dok├╝manlar asl─▒nda a├ž─▒k├ža Object t├╝r├╝ndeki de─či┼čkenleri "ili┼čkisel diziler" olarak bu ┼čekilde kullanmay─▒ ifade eder.

Ve @ palmsey'e adaletli olarak olduk├ža hakl─▒yd─▒, birle┼čtirici diziler de─čil, kesinlikle nesnelerdir :) - bir ili┼čkisel dizinin i┼čini yap─▒yorlar. Ancak, daha geni┼č noktaya gelince, kesinlikle buldu─čum bu olduk├ža iyi makaleye g├Âre hakk─▒na sahip gibi g├Âr├╝n├╝yorsunuz:

JavaScript ÔÇť─░li┼čkisel DizilerÔÇŁ Zararl─▒ Olarak Kabul Edildi

Ancak t├╝m bunlara g├Âre, kabul edilen cevab─▒n kendisi k├Ât├╝ bir uygulama de─čil midir?

Nesne i├žin bir prototip boyutu () i┼člevi belirtin

Object .prototype ├Â─česine ba┼čka bir ┼čey eklenmi┼čse, ├Ânerilen kod ba┼čar─▒s─▒z olur:

 <script type="text/javascript">
Object.prototype.size = function () {
  var len = this.length ? --this.length : -1;
    for (var k in this)
      len++;
  return len;
}
Object.prototype.size2 = function () {
  var len = this.length ? --this.length : -1;
    for (var k in this)
      len++;
  return len;
}
var myArray = new Object();
myArray["firstname"] = "Gareth";
myArray["lastname"] = "Simpson";
myArray["age"] = 21;
alert("age is " + myArray["age"]);
alert("length is " + myArray.size());
</script>
 

Ayn─▒ y├╝r├╝tme ba─člam─▒nda ├žal─▒┼čan ba┼čka bir kodunuz varsa, ├žal─▒┼čman─▒n g├╝venilir olamayaca─č─▒ndan yan─▒t─▒n kabul edilmesi gerekti─čini d├╝┼č├╝nm├╝yorum. Kesinlikle sa─člam bir ┼čekilde yapmak i├žin, myArray i├žindeki boyut y├Ântemini tan─▒mlaman─▒z ve ├╝yelerin yinelemelerini yaparken t├╝rlerini kontrol etmeniz gerekir.


14







 <script>
myObj = {"key1" : "Hello", "key2" : "Goodbye"};
var size = Object.keys(myObj).length;
console.log(size);
</script>

<p id="myObj">The number of <b>keys</b> in <b>myObj</b> are: <script>document.write(size)</script></p> 

Bu benim i├žin ├žal─▒┼č─▒yor:

 var size = Object.keys(myObj).length;
 

14







B├Âyle bir ┼čeye ne dersin --

 function keyValuePairs() {
    this.length = 0;
    function add(key, value) { this[key] = value; this.length++; }
    function remove(key) { if (this.hasOwnProperty(key)) { delete this[key]; this.length--; }}
}
 

11







E─čer hash varsa

hash = {"a": "b", "c": "d"};

hash uzunlu─ču olan anahtarlar─▒n uzunlu─čunu kullanarak uzunlu─ču alabiliriz:

anahtarlar (hash) .length


11







E─čer kullan─▒yorsan─▒z angularjs bir filtre olu┼čturma ve A┼ča─č─▒daki gibi di─čer ├Ârneklerden herhangi birinden kodu kullanarak ┼čeyler angularjs yol yapabilirsiniz 1.x:

 // Count the elements in an object
app.filter('lengthOfObject', function() {
  return function( obj ) {
    var size = 0, key;
    for (key in obj) {
      if (obj.hasOwnProperty(key)) size++;
    }
   return size;
 }
})
 

kullan─▒m

Kontrol cihaz─▒n─▒zda:

 $scope.filterResult = $filter('lengthOfObject')($scope.object)
 

Veya g├Âr├╝┼č├╝n├╝zde:

 <any ng-expression="object | lengthOfObject"></any>
 

10







Boyutunu ortaya ├ž─▒karan bir ili┼čkisel veri yap─▒s─▒na ihtiyac─▒n─▒z varsa, bir nesne yerine bir harita kullan─▒n.

 var myMap = new Map();
myMap.set("firstname", "Gareth");
myMap.set("lastname", "Simpson");
myMap.set("age", 21);
myMap.size; // 3
 

9







 var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
 
  1. Object.values ÔÇőÔÇő(myObject) .length
  2. Object.entries (myObject) .length
  3. Object.keys (myObject) .length

9







Internet Explorer 8 veya daha d├╝┼č├╝k s├╝r├╝mlerini desteklemeyi umursam─▒yorsan─▒z, a┼ča─č─▒daki iki ad─▒m─▒ uygulayarak bir nesnedeki ├Âzelliklerin say─▒s─▒n─▒ kolayca alabilirsiniz:

  1. Ya Run Object.keys() sadece bu ├Âzelliklerin adlar─▒n─▒ i├žeren bir dizi almak i├žin enumerable veya Object.getOwnPropertyNames() isterseniz de enumerable olmayan mallara isimler yer al─▒yor.
  2. .length Bu dizinin ├Âzelli─čini al .

Bunu bir kereden fazla yapman─▒z gerekirse, bu mant─▒─č─▒ bir fonksiyona sarabilirsiniz:

 function size(obj, enumerablesOnly) {
    return enumerablesOnly === false ?
        Object.getOwnPropertyNames(obj).length :
        Object.keys(obj).length;
}
 

Bu ├Âzel i┼člev nas─▒l kullan─▒l─▒r:

 var myObj = Object.create({}, {
    getFoo: {},
    setFoo: {}
});
myObj.Foo = 12;

var myArr = [1,2,5,4,8,15];

console.log(size(myObj));        // Output : 1
console.log(size(myObj, true));  // Output : 1
console.log(size(myObj, false)); // Output : 3
console.log(size(myArr));        // Output : 6
console.log(size(myArr, true));  // Output : 6
console.log(size(myArr, false)); // Output : 7
 

Ayr─▒ca bir demo i├žin bu Fiddle'a bak─▒n .


8







En basit yol b├Âyle

 Object.keys(myobject).length
 

hedefim, istedi─činiz s├╝renin nesnesidir.


8







Yukar─▒dakilerin bir k─▒sm─▒ndaki varyasyon:

 var objLength = function(obj){    
    var key,len=0;
    for(key in obj){
        len += Number( obj.hasOwnProperty(key) );
    }
    return len;
};
 

HasOwnProp'u entegre etmenin biraz daha ┼č─▒k bir yolu.


7







─░┼čte James Cogan'─▒n cevab─▒n─▒n farkl─▒ bir versiyonu. Bir arg├╝man iletmek yerine, Object s─▒n─▒f─▒n─▒ prototipleyin ve kodu daha temiz hale getirin.

 Object.prototype.size = function () {
    var size = 0,
        key;
    for (key in this) {
        if (this.hasOwnProperty(key)) size++;
    }
    return size;
};

var x = {
    one: 1,
    two: 2,
    three: 3
};

x.size() === 3;
 

jsfiddle ├Ârne─či: http://jsfiddle.net/qar4j/1/


6







Object.keys(obj).length Herhangi bir nesnenin uzunlu─čunu almak i├žin kullanabilirsiniz . Object.keys , kar┼č─▒l─▒k gelen dizinin uzunlu─čunu kullanarak bu nesnenin uzunlu─čunu bulmak i├žin kullan─▒┼čl─▒ olabilecek t├╝m nesne tu┼člar─▒n─▒ (├Âzelliklerini) i├žeren bir dizi d├Ând├╝r├╝r . Bunun i├žin bir fonksiyon bile yazabilirsiniz . Yarat─▒c─▒ olal─▒m ve bunun i├žin de bir y├Ântem yazal─▒m (daha uygun bir al─▒c─▒ ├Âzelli─či ile birlikte):

 function objLength(obj)
{
  return Object.keys(obj).length;
}

console.log(objLength({a:1, b:"summit", c:"nonsense"}));

// Works perfectly fine
var obj = new Object();
obj['fish'] = 30;
obj['nullified content'] = null;
console.log(objLength(obj));

// It also works your way, which is creating it using the Object constructor
Object.prototype.getLength = function() {
   return Object.keys(this).length;
}
console.log(obj.getLength());

// You can also write it as a method, which is more efficient as done so above

Object.defineProperty(Object.prototype, "length", {get:function(){
    return Object.keys(this).length;
}});
console.log(obj.length);

// probably the most effictive approach is done so and demonstrated above which sets a getter property called "length" for objects which returns the equivalent value of getLength(this) or this.getLength() 


5







Normal dizi i├žin verece─činiz Object.getOwnPropertyNames(myObject).length ayn─▒ sonucu elde etmek i├žin her zaman yapabilirsiniz [].length .


5







A┼ča─č─▒dakileri kullanarak Object'in uzunlu─čunu bulabiliriz:

 Object.values(myObject).length
 

4







Oyuna biraz ge├ž kald─▒k, ancak bunu ba┼čarman─▒n g├╝zel bir yolu (yaln─▒zca IE9 +), uzunluk ├Âzelli─či ├╝zerinde bir sihir al─▒c─▒ tan─▒mlamakt─▒r:

 Object.defineProperty(Object.prototype, "length", {
    get: function () {
        return Object.keys(this).length;
    }
});
 

Ve sadece b├Âyle kullanabilirsiniz:

 var myObj = { 'key': 'value' };
myObj.length;
 

Verirdi 1 .


4







A┼ča─č─▒da James Coglan'─▒n, do─črudan JavaScript'i terk edenler i├žin CoffeeScript'teki cevab─▒n─▒n bir versiyonu :)

 Object.size = (obj) ->
  size = 0
  size++ for own key of obj
  size
 

3







├Âzellik

 Object.defineProperty(Object.prototype, 'length', {
    get: function () {
        var size = 0, key;
        for (key in this)
            if (this.hasOwnProperty(key))
                size++;
        return size;
    }
});
 

kullan─▒m

 var o = {a: 1, b: 2, c: 3};
alert(o.length); // <-- 3
o['foo'] = 123;
alert(o.length); // <-- 4
 

3



─░lgili yay─▒nlar


Bir JavaScript nesneleri dizisinde kimli─če g├Âre nesne bulma

Bir JavaScript nesnesi dizisini ├Âzelli─če g├Âre s─▒ralama

JavaScript nesnesinin i├žeri─či yazd─▒r─▒ls─▒n m─▒? [├žift]

S├Âzl├╝k nesnesinin uzunlu─čunu kontrol etme

JavaScript'te Say─▒n─▒n Uzunlu─ču

SQL Server: Nesne adlar─▒n─▒n maksimum karakter uzunlu─ču

Javascript nesnelerinin iki dizisini kar┼č─▒la┼čt─▒rmak i├žin jQuery kullanma

JS nesnesindeki anahtar─▒n (dize) uzunlu─ču konusunda bir s─▒n─▒r var m─▒?

Javascript / jQuery? 'De Dize Piksel Uzunlu─čunu Belirleme?

Javascript nesne niteliklerinin varsay─▒lan de─čerini ayarla

Etiketle ilgili di─čer sorular [javascript]


window.onload vs $ (belge). zaten ()

GoogleÔÇÖ─▒n bar─▒nd─▒rd─▒─č─▒ jQueryÔÇÖi kullanman─▒n en iyi yolu, ancak Google ba┼čar─▒s─▒z oldu─čunda bar─▒nd─▒r─▒lan k├╝t├╝phaneme geri d├Ân

├ľ─čeyi diziden de─čere g├Âre nas─▒l kald─▒r─▒r─▒m?

Go'daki enumslar─▒ temsil etmenin aptalca bir yolu nedir?

Bir AES ┼čifreleme modu nas─▒l se├žilir (CBC ECB CTR OCB CFB)?

K├Â┼čeli parantezler aras─▒na metin ├ž─▒karmak i├žin d├╝zenli ifade

Otomatik Veri Taban─▒ Olu┼čtur Diyagram─▒ MySQL [kapal─▒]

├çok i┼člemli havuza benzeyen pafta havuzu mu?

C++ ve C'yi birle┼čtirmek - #ifdef __cplusplus nas─▒l ├žal─▒┼č─▒r?

Unmerged Git ┼čubelerini mi buldun?