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

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

新規登録して質問してみよう
ただいま回答率
85.46%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

461閲覧

ある配列からindexの配列を使って要素を削除したい

KT333

総合スコア3

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/10/20 07:01

編集2021/10/20 07:19

下記のような配列があったとします。

JavaScript

1const colors = ['red', 'green', 'yellow', 'blue']; 2const indexStringArray = ['0', '1']

colors配列のindex0とindex1を取り除き、下記のような2つの配列をつくりたいです。

JavaScript

1const oldColors = ['yellow', 'blue'] 2const newColors = ['red', 'green']

1つならspliceでなんとかなりました。
2つになると、spliceで削除しようにもindexがずれてしまいます。
例:
[red,green,yellow,blue]でindex:0のredを消すと
[green,yellow,blue]のindex:1を消してしまい[red,yellow]と[green,blue]になってしまう。

そこで、消したものに応じてindexを増やしたり減らしたりしようかと思いましたが、非常に面倒な実装になりそうでした。

30分ほど考えて思いついたのが、下記です。

TypeScript

1const colors: (undefined | string)[] = ['red', 'green', 'yellow', 'blue']; 2const indexStringArray = ['0', '1']; 3 4// colorsからindexStringArrayを使ってredとgreenを取り出す。 5const newColors = indexStringArray.map((indexString) => colors[parseInt(indexString)]); 6 7// colors[index]をundefinedに置き換える[undefined, undefined, 'yellow', 'blue'] 8indexStringArray.map((numStr) => (colors[parseInt(numStr)] = undefined)); 9 10// filter(Boolean)でundefinedを削除する。残ったのが['yellow', 'blue'] 11const oldColors = colors.filter(Boolean);

これで一応解決している(?)のですが、もっとスマートな回答がありませんでしょうか。
なんだか回りくどい解決をしているような気がします。

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

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

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

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

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

guest

回答2

0

javascript

1const colors = ['red', 'green', 'yellow', 'blue']; 2 const indexStringArray = ['0', '1']; 3 const oldColors = colors.filter((_,i)=>!indexStringArray.includes(""+i)); 4 const newColors = colors.filter((_,i)=> indexStringArray.includes(""+i)); 5 console.log(oldColors); 6 console.log(newColors);

これでいかが?

投稿2021/10/20 07:53

tkturbo

総合スコア5572

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

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

KT333

2021/10/20 08:52

すごくわかりやすいです。ありがとうございます。
guest

0

ベストアンサー

javascript

1const colors = ['red', 'green', 'yellow', 'blue']; 2const indexStringArray = [0,1]; 3const oldColors = []; 4const newColors = []; 5colors.forEach((x,y)=>{ 6 (indexStringArray.includes(y)?newColors:oldColors).push(x); 7}); 8console.log(oldColors); 9console.log(newColors);

投稿2021/10/20 07:31

yambejp

総合スコア115012

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

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

KT333

2021/10/20 07:49

すごくスマートですね。かつ複雑でもない。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問