配列が0~99まであった時に、pushで先頭に101個目を追加したとき、配列の最後尾を削除したいのですが、
for(var i =0; i < 100; i++){ var Arr = Arr.push(i); ~
と言った方法以外に何かスマートなやり方はありませんでしょうか?
※100個までは常にpushで先頭に追加
※100個以上で先頭に追加された場合に最後尾の要素を削除したい
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
100個までは常にpushで先頭に追加
とありますが、Array.prototype.push
は最後尾への追加です(MDN)。
「先頭追加、末尾削除」であればunshift
とpop
の組み合わせで、「末尾に追加、先頭削除」であればpush
とshift
で行えます。
投稿2017/03/22 07:06
総合スコア145184
0
先頭と最後尾という言葉の意味が混乱してしまいます。
push()を使っているため、先頭というのはインデックスを使って示すとArr[Arr.length - 1]のことで、最後尾はArr[0]ということでいいですか?
この認識でいいという仮定でいくと
javascript
1(Arr = Arr.slice(-99)).push(i);
という書き方になるかと。
もし、逆でしたら
javascript
1(Arr = Arr.slice(0, 99)).unshift(i);
という書き方になるかと。
投稿2017/03/22 07:26
編集2017/03/22 07:27総合スコア4267
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
追加が1回に一つずつだとして、
JavaScript
1function pushArray(arr, item) 2{ 3 arr.unshift(item); // 先頭に追加 4 if (arr.length == 101) { 5 arr.pop(); // 最後尾を削除 6 } 7}
という感じの関数でもあればよいでしょうか?
※質問は「末尾にどんどん追加していって、100を超えたら先頭から削る」の様な気もします。その場合は unshift() の代わりに push()、pop() の代わりに shift() を使います。
投稿2017/03/22 07:13
総合スコア13703
0
こんな感じですよね?
javascript
1var Arr=[]; 2var max=10; 3for(var i =0; i < 20; i++){ 4 Arr.unshift(i); 5 while(Arr.length>max){ 6 Arr.pop(); 7 } 8} 9console.log(Arr)
100個だと確認しづらいので、20個順に先頭に投入し、
10個を超えたデータを末尾から削除していっています。
途中経過をきにしないなら実際には投入だけさきにやって
終わった後にpopしたほうが効率的です。
投稿2017/03/22 07:14
総合スコア114843
0
問題からして間違ってる気がするのですが、学校の課題でしょうか・・・?
JavaScriptの配列の使い方まとめ。要素の追加,結合,取得,削除。
先頭に追加 は
var array = ['b', 'c'];
array.unshift('a');
console.log(array); // ['a', 'b', 'c']
末尾に追加 は
var array = ['a', 'b'];
array.push('c');
console.log(array); // ['a', 'b', 'c']
頑張って下さい。
投稿2017/03/22 07:11
総合スコア278
0
コードゴルフですね(違)
javascript
1( Arr = [i].concat(Arr) ).splice(100,99999999);
投稿2017/03/22 07:56
総合スコア36115
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/22 08:03