1. ホーム
  2. javascript

[解決済み] JavaScript: 引数がオブジェクトでなく配列であることを検出する(Node.JS)

2023-03-29 10:35:54

質問

引数が配列である場合、どのように検出すればよいのでしょうか。 typeof []'object' で、配列とオブジェクトを区別したい。

オブジェクトが以下のようになる可能性があります。 {"0":"string","1":"string","length":"2"} のように見える可能性がありますが、実際には配列のように見えるオブジェクトである場合、配列として出てきて欲しくありません。

JSON.parseJSON.stringify はこの区別をすることができます。どうすればいいのでしょうか?

Chromeと同じV8ベースのNode.JSを使っています。

どのように解決すればよいですか?

  • Array.isArray

V8のネイティブ関数です。高速で、常に正しい。これはES5の一部です。

  • arr instanceof Array

オブジェクトが配列コンストラクタで作成されたかどうかをチェックします。

underscoreのメソッドです。以下は、そのソースから引用したスニペットです。

var toString = Object.prototype.toString,
    nativeIsArray = Array.isArray;
_.isArray = nativeIsArray || function(obj) {
    return toString.call(obj) === '[object Array]';
};

このメソッドはオブジェクトを受け取り Object.prototype.toString メソッドを呼び出します。これは常に [object Array] を返します。

私の個人的な経験では toString メソッドを使うのが最も効果的ですが、これは instanceof Array のような速さはありません。 Array.isArray のように高速ではありませんが、これはES5のコードであり、私は移植性のためにそれを使用しない傾向があります。

個人的には underscore これは一般的なユーティリティメソッドを含むライブラリです。コードをDRYアップしてくれる便利な関数がたくさんあります。