0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JavaScript チート・オブジェクトの要素数とオブジェクトの配列の要素数を求める

Last updated at Posted at 2022-08-18

オブジェクトの要素数は .length から取得できない

obj1 = {name: "mop", age:"15"};
console.log(obj1.length);

よく書いてしまうコードなのですが undefined がログに出力されます

(連想配列の)オブジェクトには .length というプロパティは無いんですね

オブジェクトの要素数は Object.keys(obj).length から取得する

console.log(Object.keys(obj1).length);

2 がログに出力されます。

Object.keys() メソッドは、引数に指定されたオブジェクトのキーの配列 (この例では ['name', 'age']) を返してくれます。この配列の .length プロパティが、オブジェクトの要素数を示しています

.length プロパティは更新可能ですが、メタプログラミング以外で更新することはまずないと思います。.length は、より小さい値で更新すれば後方の配列要素が失われますし、大きい値で更新すれば、後方に空の要素が加わります。

オブジェクトの配列の要素数は .length から取得できる

obj1 = {name: "mop", age:"15"};
obj2 = {name: "mike", age: "58"};
obj3 = {name: "hana", age: "51"};
objs = [obj1, obj2, obj3]
console.log(objs.length)

objs は配列なので .length を参照すれば、その要素数 3 がログ出力されます

Object.keys(objs).length からも取得できるのでは?

console.log(Object.keys(objs).length)

3 がログ出力されます

Object.keys(objs) からは ['0', '1', '2'] の配列が返ってくるので、この配列の .length プロパティは 3 を示しています

このアプローチも一見正しいように見えていますが、配列 (ここでは objs) の .length プロパティを参照するのが正しいアプローチだと思っています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?