Array.size()とArray.length


385

2つの違いは何ですか?

だから私はそれarray.size()array.lengthプロパティである間、それが関数であることを知っています。どちらを使うかというユースケースはありますか?もう1つ効率的ですか?(.lengthメソッド呼び出しではなくプロパティであるため、大幅に高速になると思いますか?)なぜより遅いオプションを使用するのですか?どちらかと互換性のないブラウザはありますか?

  var x = [];
  console.log(x.size());
  console.log(x.length);
  console.log(x.size()==x.length);
  x =[1,2,3];
  console.log(x.size());
  console.log(x.length);
  console.log(x.size()==x.length);

印刷されます:

  0, 0, true
  3, 3, true

63
Array.size()ネイティブJavaScriptでメソッドをどこで見つけましたか?
VisioN 2013年

2
Chromeには.size... がありません
0x499602D2 2013年

1
@AbrahamP idkあなたが使用しているChromeコンソールは何か...
Naftali別名Neal


3
.size()プロトタイプフレームワークからの可能性があります:prototypejs.org/doc/latest/language/Array/prototype/size
MikeM

回答:


535

Array.size()は有効なメソッドではありません

常に長さプロパティを使用する

これはネイティブプロトタイプメソッドではないため、配列プロトタイプにサイズメソッドを追加するライブラリまたはスクリプトがあります。これは通常、カスタムゲッターのサポートを追加するために行われます。これを使用する例は、配列のメモリ内のサイズを取得する場合です(これは、この名前に役立つと考えることができる唯一のものです)。

Underscore.jsは、残念ながらsize実際にオブジェクトまたは配列の長さを返すメソッドを定義しています。残念ながら、関数の長さプロパティは名前付き引数の数として定義されているため、関数は代替を使用する必要があると宣言し、サイズを選択しました(カウントの方が適切でした)。


154

.size()のネイティブJS関数ではありませんArray(少なくとも、私が知っているブラウザでは)。

.length 使用する必要があります。


もし

.size() あなたのページ上の作業は、必ずのように含まれるすべての余分なライブラリを持っていないことを確認してくださいプロトタイプをいじくるているArrayプロトタイプを。

または

ブラウザにプラグインがあり、Arrayプロトタイプに干渉している可能性があります。


@BartFriederichs私はChromeを使用していますが、知っておくと役に立ちます:-D
Naftali別名Neal

Chromeでは機能しますが、Firefoxでは機能しません。デバッグのニーズにChromeを使用する傾向があるため、機能するようです。存在しないことを指摘してくれてありがとう。
アブラハムP

9
Chromeで動作する場合は、ページで呼び出している追加のライブラリが、Arrayプロトタイプに追加されている可能性があります。
スパイクウィリアムズ

1
... .LENGTH周りの単なるラッパーだから、実際には...私はちょっと今愚かな感じ;バージョン23.0.1271.97 [] .size機能サイズ(){this.lengthを返す}
アブラハムP

2
@AbrahamP、このページでF12を押し、[].sizeコンソールに入力します。それが機能する場合は、アレイのプロトタイプをいじくっているChromeプラグインがあるため、心配になります。:)
aquinas 2013年

30

この.size()関数は、Jqueryおよび他の多くのライブラリで使用できます。

この.lengthプロパティは、インデックスが整数の場合にのみ機能します。

lengthプロパティがします、配列のこのタイプで動作します。

var nums = new Array();
nums[0] = 1; 
nums[1] = 2;
print(nums.length); // displays 2

lengthプロパティはありません、配列のこのタイプで動作します。

var pbook = new Array(); 
pbook["David"] = 1; 
pbook["Jennifer"] = 2;
print(pbook.length); // displays 0

したがって、あなたのケースでは.lengthプロパティを使用する必要があります。


サイズが機能しない場合、文字列で機能するものはありますか?
Chris

2
pbook上記のような文字列キーを持つ配列の場合は@Chris、$(pbook).size();[jQueryが必要]を使用できます
厄介なペースト

3
しかし、どこにでも2つのスペースを配置するのですか?
自己投稿

19

.size() jQueryのものです。おそらく、jQueryライブラリを自分のプロジェクトにインポートした他のユーザーと混同しているか、他の誰かから奪っています。

あなたが持っているだろう場合はjQueryのインポートとあなたのような書き込みをしたい$(array).size()、それが配列の長さを返します。


1
多くのライブラリ.size()がjqueryだけでなくそれを使用しています
Naftali別名Neal

15

array.length は必ずしも配列内の項目数ではありません。

var a = ['car1', 'car2', 'car3'];
a[100] = 'car100';
a.length; // 101

配列の長さは、最高のインデックスよりも1つ長くなります。

前述のとおりArray.size()、有効な方法ではありません。

詳しくは


実際にはアイテムの数です。ほとんどのJSインタープリターは、配列行を未定義で埋めます。あなたの例では、値のない97個の要素(未定義)を持つ配列に101個の要素がありますが、要素はそこにあります。['car1'、 'car2'、 'car3'、undefined * 97、 'car100']この配列でループすると、ループの後、インクリメント変数の値は101になります。
ElJackiste 2018年

一方、array.lengthは、必ずしも配列で定義された(割り当てられていない)値の数ではありません。
ElJackiste 2018年

4

プロパティ 'length'は、数値キーを持つ配列の(last_key + 1)を返します。

var  nums  =  new  Array ();
nums [ 10 ]  =  10 ; 
nums [ 11 ]  =  11 ;
log.info( nums.length );

12を印刷します!

これは動作します:

var  nums  =  new  Array ();
nums [ 10 ]  =  10 ; 
nums [ 11 ]  =  11 ;
nums [ 12 ]  =  12 ;
log.info( nums.length + '  /  '+ Object.keys(nums).length );

これは興味深い答えであるが、私はそれが答えだ完全にわからないんだけど、この質問
OliverRadini

OPは「Array.size()対Array.length」を求めていました。これまでの説明から、「size」関数は標準のJavaScriptの一部ではなく、ライブラリによって実装されることが明らかになりました。したがって、OPはJavaScript配列の実際の長さを取得する方法に関心があると想定しています。特に、配列に文字列などの他のタイプのオブジェクトが含まれる場合の動作が異なるため、予期しない動作を引き起こす可能性のあるJavaScriptのほとんど知られていない「機能」を発見しました。
cskwg 2018年


2

サイズは重複を検出し、一意の値の数を返します

const set1 = new Set([1, 2, 3, 4, 5, 5, 5, 6]);
console.log(set1.size);
// expected output: 6

1

実際、.size()純粋なJavaScriptメソッドではありません。少し似ているSetオブジェクトのアクセサープロパティが.sizeありますが、これは関数メソッドではありません。先ほど言ったように、一意の数を示すのはSetオブジェクトのアクセサープロパティです。 Setオブジェクトの(一意の)要素。.size()

サイズアクセサープロパティは、Setオブジェクトの(一意の)要素の数を返します。

const set1 = new Set();
const object1 = new Object();

set1.add(42);
set1.add('forty two');
set1.add('forty two');
set1.add(object1);

console.log(set1.size);
// expected output: 3

そしてlength、その配列の要素の数を返す反復可能なオブジェクト(配列)のプロパティです。値は符号なしの32ビット整数で、常に配列内の最高のインデックスよりも数値的に大きくなります。

const clothing = ['shoes', 'shirts', 'socks', 'sweaters'];

console.log(clothing.length);
// expected output: 4

0

.lengthプロパティを使用して、配列の要素数を設定または返すことができます。戻り値は数値です

> set the length: let count = myArray.length;
> return lengthof an array : myArray.length

重複する値をフィルタリングしてセット内の要素の数を取得する必要がある場合は、.sizeを使用できます。

const set = new set([1,1,2,1]); 
 console.log(set.size) ;`
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.