記事(以下のリンク)では、文字列でlengthプロパティを使用すると、オブジェクト参照が作成され、関数が不必要に遅くなることが示唆されています。
http://www.webreference.com/programming/javascript/jkm3/2.html
このコンテキストで、lodash _.size()を使用する利点は何ですか? (ネイティブ...?)lengthプロパティと異なる動作をしますか?
オブジェクト内の配列またはキーをカウントしている場合、lengthプロパティの代わりにlodashサイズを使用する利点はありますか?
Lodashソースから、_.size()
は次のように実装されます。
_function size(collection) {
var length = collection ? getLength(collection) : 0;
return isLength(length) ? length : keys(collection).length;
}
_
配列の場合、最初の行は_collection.length
_を間接的に実行しているため、_.size()
は、もしあれば、少し(少し)少し遅くなります。
パフォーマンスの記事で、パフォーマンスの問題は、同じ目標を達成するためにスタック上の数値を使用できたときに、length
のプロパティルックアップが使用されていることです。言い換えれば、解決策は、より高速なプロパティを探すことではなく、実行可能な場合にプロパティを完全に回避することでした。
size() 関数は、結果のサイズが必要な場合にチェーンで最も役立ちます。サイズを取得するためだけに value() を使用してすべてをアンパックしても意味がありません。例えば:
__(_.range(10))
.filter(function(item) { return item % 2; })
.size();
_
長い形式とは対照的に:
__(_.range(10))
.filter(function(item) { return item % 2; })
.value()
.length;
_
この関数は、オブジェクトのサイズを見つけやすくします:
__.size({ a: 1, b: 2 });
_
とは対照的に:
_Object.keys({ a: 1, b: 2 }).length;
_
size()
はパフォーマンスではなくコードの簡潔さに関するものです。