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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

4回答

1927閲覧

配列から前後の文字列だけを削除したい

kamekamekame

総合スコア16

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/06/17 01:44

編集2019/06/17 01:47

下記コードの流れでわからないところがあります。

まず対象の配列がこうあります。
Array [ "[いぬ[の] しっぽ]", "[ねこのしっぽ]" ]
ここから前後の括弧だけを削除したいと考えています。

つまりこうしたいのです。
Array [ "いぬ[の] しっぽ", "ねこのしっぽ" ]

そのために下記コードでは.slice()を使い、前後の括弧を削除しているつもりです。

jQuery

1// 対象の配列 2let array = [ "[いぬ[の] しっぽ]", "[ねこのしっぽ]" ]; 3 4// 前後の括弧だけ削除する 5let result = []; 6array.forEach(function(x){ 7 array = x.slice( 0, -1 ).slice( 0, 1 ) ; 8 result.push(array); 9}); 10 11// Array [ "いぬ[の] しっぽ", "ねこのしっぽ" ] としたい 12console.log( result );

わからないのは、括弧を削除しているつもりが、括弧だけが残ってしまうという現象です。

目的は、Array [ "いぬ[の] しっぽ", "ねこのしっぽ" ]なのに
結果は、Array [ "[", "[" ]となってしまうのです。

どうすれば目的のようになるでしょうか?

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

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

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

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

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

guest

回答4

0

forEach内部でarrayを呼んでいるため、もとの配列を上書きしてしまっています

別の変数名にするか、直接result.pushを呼ぶかして、arrayを上書きしないようにしましょう。

javascript

1array.forEach(function(x){ 2 result.push(x.slice( 0, -1 ).slice( 0, 1 )); 3});

なお、このような「配列の各要素に操作を加えて別な配列を得る」というのには、.mapというメソッドも便利です。

javascript

1var result = array.map(function(x){ 2 return x.slice( 0, -1 ).slice( 0, 1 ); 3});

投稿2019/06/17 02:00

編集2019/06/17 02:00
maisumakun

総合スコア145183

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

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

kamekamekame

2019/06/17 02:04

ありがとうございます。yambejp様のおかげで解決したものの原因がわからないままでしたので、ご説明に感謝申し上げます。
guest

0

ベストアンサー

javacript

1var a = [ "[いぬ[の] しっぽ]", "[ねこのしっぽ]" ]; 2a=a.map(x=>x.substr(1,x.length-2)); 3console.log(a);

投稿2019/06/17 01:59

yambejp

総合スコア114819

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

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

kamekamekame

2019/06/17 02:02

たびたびのご回答に心より感謝申し上げます!おかげ様で考えたことがひととおりできそうです。本当にありがとうございました。
guest

0

まずは、
sliceの仕様を勘違いされているかと思います。

Array.prototype.slice() - JavaScript | MDN

sliceが返すのは、抜いた残りを返すのではなく、
抜いた文字自体を返します。

よって、array変数には、質問者さんが書いた通りのものが入っているわけです。

また、元配列である、arrayは破壊的に、代入し直すのは後々の処理も面倒になるし、あまりよろしくないかと。

下記でいかがでしょうか。

javascript

1array.forEach(function(x){ 2 let str = x.slice(1, x.length - 1); 3 result.push(str); 4});

ようは、文字列の、二文字目から、最後から二番目の文字を取得するって結果です。
ですが、この形なら、replaceを使って、正規表現で文字を抜き出した方がいいかと思います。
本質問の要件ではないので、replaceと正規表現に関してはご自分でお調べください。

投稿2019/06/17 02:07

miyabi_takatsuk

総合スコア9528

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

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

0

slice(0, 1)で文字列の先頭から一文字を切り出しているため先頭の括弧だけが切り出されています。
sliceを使用して先頭の文字を切り取る場合はslice(1)のように記述します。

投稿2019/06/17 02:02

ryo_y

総合スコア244

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

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

kamekamekame

2019/06/17 02:05

なるほど、私の書き方は「削除」ではなく「切り出し(取得)」だったのですね。覚えておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問