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

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

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

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

Q&A

解決済

3回答

814閲覧

js 配列の削除(削除したい添え字がリストになっている)

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2019/03/07 08:22

js

1 2let array = [ 'a', 'b', 'c' ] 3let deleteIndexList = [ 0, 1, 2 ] 4 5deleteIndexList.map( (x) => { array.splice(x, 1) } ) 6

元の配列のリスト(let array)と、削除したい添え字のリスト(let deleteIndexList)があり

deleteIndexListが持ってるすべての添え字のオブジェクトをarrayから削除したいです。

日本語が変でごめんなさい。
上記方法(deleteIndexList.map( (x) => { array.splice(x, 1) } ))でやると、mapで回して削除している間にlet arrayの添え字とオブジェクトの関係が変化するので、うまくlet deleteIndexList通りに削除できません。
let arrayから、指定された添え字を同時に削除したいって感じです...。
どのようにすれば良いでしょうか。

Ramda.jsをimportしてますので、Ramdaの関数も使えます。

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

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

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

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

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

guest

回答3

0

javascript

1let array = ['a','b','c','d','e']; 2let deleteIndexList = [0,2,4]; 3deleteIndexList.reverse().forEach(function(x){ 4 array.splice(x, 1); 5}); 6console.log(array);

よく考えたらfilterしてもよかったですね

javascript

1let array = ['a','b','c','d','e']; 2let deleteIndexList = [0,2,4]; 3array=array.filter(function(x,y){ 4 return !deleteIndexList.includes(y); 5}); 6console.log(array);

投稿2019/03/07 08:28

編集2019/03/07 09:25
yambejp

総合スコア114829

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

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

退会済みユーザー

退会済みユーザー

2019/03/07 08:50

ありがとうございます...(T_T)
yambejp

2019/03/07 09:26

解決ずみのようですが、filterも書いておきました
guest

0

こんにちは。

考え方として、

  • array に含まれる各要素について、そのインデクスが deleteIndexList に含まれないものだけを集めた配列を作り、これを新たに array とする。

というやり方で、以下はどうでしょう?

javascript

1array = array.filter((_, i) => !deleteIndexList.includes(i));

なお、上記だと deleteIndexList の要素は昇順に並んでいる必要はありません。

投稿2019/03/07 08:51

jun68ykt

総合スコア9058

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

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

0

ベストアンサー

逆順で実行すれば、問題なく通るかと思います。

javascript

1let array = [ 'a', 'b', 'c' ] 2let deleteIndexList = [ 0, 1, 2 ] 3 4deleteIndexList.slice().sort((a, b) => b - a).forEach( (x) => { array.splice(x, 1) } )

投稿2019/03/07 08:25

maisumakun

総合スコア145184

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

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

maisumakun

2019/03/07 08:34

なお、途中で入っている.slice()は配列のコピーです(deleteIndexListが逆順にソートしてしまってもそれでいい、というならコピーは不要です)
退会済みユーザー

退会済みユーザー

2019/03/07 08:50

できました、ありがとうございます...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問