質問

しなければならないJavaScriptオブジェクトという

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

が内蔵または受け入れて最善の実践方法の長さのこのオブジェクト?

役に立ちましたか?

解決

最も堅牢な答え(この趣旨をいいながら原因の少ないバグ)することはできない。

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す な追加オブジェクトです。試作, ので、これにより遮断しているenumerationsは各図書館です。追加方法でオブジェクトは、通常の安全れています。


ここの更新としての2016年までに 普及のES5 ます。 IE9のための+その他の近代ES5+できるブラウザで使用でき Object.keys() 上記のコードだけでな

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

このない変更、既存の試作から Object.keys() は内蔵しています。

編集:オブジェクトにおいて象徴的な性質はお返しできませんので経由でオブジェクトです。キー方法。その答えすることなく、不完全もします。

シンボル型のスタンドを追加した言語をクエストに一意な識別子オブジェクト。果実のシンボルタイプ防止で上書き.

Object.keys または Object.getOwnPropertyNames 動作しないための象徴的な物件です。われているという利用する必要があり 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

他のヒント

だから取り寄せた選りすぐりのない心配 hasOwnProperty チェックすることができ非常に単純に:

Object.keys(myArray).length

更新:使用している場合は、 Underscore.js (推奨で軽量化が期待できます!), その後できるだけでな

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

ない場合, られないときには、いくつかのしました。回オブジェクトのプロパティ、理由の如何にかかわらず、既にjQueryを使うには、プラグインが均等にアクセス:

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

こちらのクロスブラウザます。

このように受け答えがでネイティブオブジェクトです。キー場が存在します。このように、最速のためのすべての最近のブラウザを推奨いたします。

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;

したらいいと思います。JavaScriptの専門家のようにも見えますがループを通じて、要素をカウントしてオブジェクトにはあまりない長方法

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

@palmsey:公平性を保つのOP、JavaScriptの文書を実際に明示的に利用"をご覧ください変数の型オブジェクトこのように"と連想配列".

このメソッドがすべてのオブジェクトのプロパティの名前を配列で取得できる長さの配列は等しいごのオブジェクトのキーの長さです。

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

な混乱の試作やその他のコードが構築や自分のオブジェクト:

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

場合は、addメソッドの長さにある手開きのドアを入ると正しい。場合でも、またはその他忘れものとして追加できる物件のカウンターにて掲載の方法。

もちろん、常に上書きします。していても、コードをうなが著、debug.;)

最も単純な一つは

Object.keys(myObject).length

こちらはどうやったらさいしょからになることを確認することはないの試作チェーン

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

単にこの length:

Object.keys(myObject).length

ためなどに利用できる可能性があるとよば店のサイズを個別に変更します。特に、がんを加えた配列に要素が一つの場所で簡単に増分します。もちろん作品をより高速が必要な場合はチェックのサイズでは多発します。

こちらは完全に異なった解決がなければならない現代的なブラウザIE9+、Chrome、Firefox4+、オペラ11.60+、Safari5.1+)

jsFiddle

設定のご連想配列クラス

/**
 * @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;
    }
});

現在利用することができて...

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

用途:

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

@palmsey:公平性を保つのOP、javascript docs実際に明示的に利用"をご覧ください変数の型オブジェクトこのように"と連想配列".

及び公正性を@にpalmseyた非常に正確な連想配列が互い違オブジェクト)としている仕事の連想配列の型になります。ものについて幅広い点だと思うのでこのような微細な条ん:

JavaScript"連想配列"と有害

それによると、できないのではないで 受け答え 自身の悪い習?

指定型サイズ()機能のオブジェクト

その他追加されているオブジェクトです。試作し、このコードに失敗します。

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

いとは思わない答えの一つとしてはできなくなる信頼される場合にはそれその他のコード走行の実行コンテキストで堅牢なファッションでしょう定義する必要がありサイズ法myArrayチェックのタイプのメンバーとしていを繰り返し処理します。

うようなこと--

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

また、ハッシュ

ハッシュ={"a":"b","c":"d"};

までの長尺の長さの鍵の長さのハッシュ:

キーハッシュ).長さ

ご利用の場合 AngularJS 1.xができないものはAngularJSの方法で作成フィルターと、コードエディタツールバーからその他の例は以下のような:

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

用途

にコントローラ:

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

や眺望:

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

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

この作品は私にとって:

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

が必要な場合は連想したデータ構造本文サイズ、使用地図の代わりにオブジェクトです。

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

の変化には:

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

ああこれまでにない統hasOwnProp.

ない場合は介護支援についてInternet Explorer8以下になりますの物件数オブジェクトには次の二つのステップ

  1. 走りのいずれか Object.keys() を含む配列の名前だける物件 enumerable または Object.getOwnPropertyNames() したい場合は、名前のない物性enumerable.
  2. を取得し .length 物件の配列になります。

が必要な場合はこの度、ラップこの論理関数:

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

使い方はこの機能:

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

参照 この怒 たーとなる。

var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
  1. オブジェクトです。値myObject).長さ
  2. オブジェクトです。作品集(myObject).長さ
  3. オブジェクトです。キー(myObject).長さ

こちらのバージョンの異なるジェームス-Coganの答えです。代わりの引数は、試作品のオブジェクトのクラスのコードクリーナーです。

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例: http://jsfiddle.net/qar4j/1/

利用することさえ可能です Object.keys(obj).length どのオブジェクトを取得してください。オブジェクトです。キーの配列を返しますを含むすべてのオブジェクト キー (財)まで来の長さのこのオブジェクトの長さに対応する配列の型になります。きものを書く 機能 ます。ましょう 創造 と書く 方法 もともとより所ゲッター性):

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()

最も簡単な方法は以下のようになっています

Object.keys(myobject).length

がmyobjectジへのアクセスにはログインしたいものの長さ

できない Object.getOwnPropertyNames(myObject).length 車と同じ結果 [].length うための通常の配列になります。

下記のコンサートシリーズでは、ジェームズ-Coglanの解答CoffeeScript方を捨て直JavaScript:)

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

財産

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

使用

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

までの長さのオブジェクトを使用:

Object.values(myObject).length

少し遅めの、ゲームにはエクスペディアそのために(IE9+のみ)を定義するマジックゲッターの長さの物件:

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

できるだけの使用ではこのように:

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

1.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top