質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

6回答

4229閲覧

配列の個数が100個まであり、101個目が追加されたら一番古いものは削除したい

ozaki566

総合スコア29

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/03/22 06:55

編集2017/03/22 06:56

配列が0~99まであった時に、pushで先頭に101個目を追加したとき、配列の最後尾を削除したいのですが、

for(var i =0; i < 100; i++){ var Arr = Arr.push(i); ~

と言った方法以外に何かスマートなやり方はありませんでしょうか?

※100個までは常にpushで先頭に追加
※100個以上で先頭に追加された場合に最後尾の要素を削除したい

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

100個までは常にpushで先頭に追加

とありますが、Array.prototype.push最後尾への追加です(MDN)。

「先頭追加、末尾削除」であればunshiftpopの組み合わせで、「末尾に追加、先頭削除」であればpushshiftで行えます。

投稿2017/03/22 07:06

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozaki566

2017/03/22 08:03

根本のところで認識が誤っていました(._.;) ご指摘ありがとう御座いました!
guest

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
turbgraphics200

総合スコア4267

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozaki566

2017/03/22 08:05

pushの認識自体に誤りがありましたm(_ _;)m ご指摘ありがとう御座います! 無事うまくいきました!
guest

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

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozaki566

2017/03/22 08:04

101回以上から削除していくという方法が一番スマートですね! アドバイスありがとうございました!
guest

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

yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozaki566

2017/03/22 08:05

unshiftで追加して末尾をPOPで消すという方法が一番良いですね! アドバイスありがとうございました!
guest

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

raichi

総合スコア278

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozaki566

2017/03/22 08:04

問題すらが間違っていました(x_x;) 無事上手く動作しました!
guest

0

コードゴルフですね(違)

javascript

1( Arr = [i].concat(Arr) ).splice(100,99999999);

投稿2017/03/22 07:56

Lhankor_Mhy

総合スコア36115

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozaki566

2017/03/22 08:03

こんな書き方もあるのですね! 勉強になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問