[解決済み] JavaScriptで配列の要素を回転させる
2022-02-25 20:14:17
質問
JavaScriptの配列を回転させるのに最も効率的な方法は何だろうと考えていました。
私はこの解決策を思いつきました。
n
は配列を右に回転させ、負の数の
n
を左へ(
-length < n < length
) :
Array.prototype.rotateRight = function( n ) {
this.unshift( this.splice( n, this.length ) );
}
そして、このように使うことができます。
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
months.rotate( new Date().getMonth() );
上記の私のオリジナル版には、以下のような欠陥があります。 クリストフ のコメントで、正しいバージョンは(追加のリターンがチェーンを可能にする)です。
Array.prototype.rotateRight = function( n ) {
this.unshift.apply( this, this.splice( n, this.length ) );
return this;
}
JavaScriptフレームワークの文脈で、よりコンパクトで、より高速なソリューションはありますか?(以下に提案するバージョンはいずれも、よりコンパクトでも高速でもありません)
JavaScriptのフレームワークで、配列回転を内蔵しているものはありますか?(まだ誰からも回答がありません)
どのように解決するのですか?
配列を変異させるタイプセーフな汎用版。
Array.prototype.rotate = (function() {
// save references to array functions to make lookup faster
var push = Array.prototype.push,
splice = Array.prototype.splice;
return function(count) {
var len = this.length >>> 0, // convert to uint
count = count >> 0; // convert to int
// convert count to value in range [0, len)
count = ((count % len) + len) % len;
// use splice.call() instead of this.splice() to make function generic
push.apply(this, splice.call(this, 0, count));
return this;
};
})();
コメントで Jean は、このコードが
push()
と
splice()
. これはあまり意味がないと思うのですが(コメント参照)、手っ取り早い解決策(多少ハックされますが)は、次の行を置き換えることでしょう。
push.apply(this, splice.call(this, 0, count));
をこれを使って
(this.push || push).apply(this, (this.splice || splice).call(this, 0, count));
使用方法
unshift()
の代わりに
push()
は、Opera 10では約2倍の速さですが、FFではその差はごくわずかでした;このコード。
Array.prototype.rotate = (function() {
var unshift = Array.prototype.unshift,
splice = Array.prototype.splice;
return function(count) {
var len = this.length >>> 0,
count = count >> 0;
unshift.apply(this, splice.call(this, count % len, len));
return this;
};
})();
関連
-
[解決済み】 Uncaught TypeError: data.push is not a function
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み】Uncaught TypeError: nullのプロパティ'value'を読み取ることができない
-
[解決済み】JavaScriptのisset()に相当するもの
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】JavaScriptのボタンonclickが機能しない
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み】WebSocket接続に失敗しました。WebSocket のハンドシェイク中にエラーが発生しました。予期しない応答コードです。400
-
[解決済み】Syntax error: JavaScriptの不正なreturnステートメント
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み】module.exports "モジュールが定義されていません"