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

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

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

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

JavaScript

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

配列

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

Q&A

解決済

3回答

595閲覧

JSでの配列の構造について matchメソッドの返り値

shunta80

総合スコア96

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

JavaScript

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

配列

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

1グッド

1クリップ

投稿2023/06/28 11:00

実現したいこと

matchメソッドを利用した際の返り値の配列の構造が理解できない

前提

下記のように配列を定義するとエラーになります。
配列の中でオブジェクトのキーはそのまま書けません

const h=[ '111111','222222',index: 0,input: 'ああああああ' ]

しかし、matchメソッドを使った際の返り値の値は配列の中に直接オブジェクトのキーが入っています

該当のソースコード

const paragraph = '//sssssssss/vvvvvvvv/bbbbb' const regex = /^\/(.*)\/bbbbb/ const result = paragraph.match(regex) console.log(result)

コンソールで確認できる返り値

 ['//sssssssss/vvvvvvvv/bbbbb', '/sssssssss/vvvvvvvv', index: 0, input: '//sssssssss/vvvvvvvv/bbbbb', groups: undefined]

この形で配列が返ってくるのに自分で同じ構造で定義した際はエラーになる意味がわかりません。

試したこと

プロパティにアクセスできることを確認

console.log(result?.input) console.log(result['input'])

回答よろしくおねがいします

ams2020👍を押しています

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

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

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

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

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

otn

2023/06/28 11:08

> 自分で同じ構造で定義した際はエラーになる 具体的にどういうことでしょうか?コードと結果を書きましょう。
shunta80

2023/06/28 13:08

自分で定義した際というのは前提のところに書いてあるコードになります。
guest

回答3

0

自分で同じ構造で定義した際はエラーになる意味がわかりません。

単に、その書き方が文法的に正しくないだけです。

GPTの回答のように、「一旦配列を作ってから、名前の付いたプロパティを代入する」必要があります。

投稿2023/06/28 23:50

maisumakun

総合スコア145184

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

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

0

ベストアンサー

配列もオブジェクトなので任意のプロパティがモテるというだけです。
もちろん自分で構造の定義もできます

javascript

1const h=Object.assign([ '111111','222222'],{index: 0,input: 'ああああああ'}); 2console.dir(h);

冗長にやるならこう

javascript

1const h=['111111','222222']; 2Object.defineProperty(h,"index",{enumerable:true,value:0}); 3Object.defineProperty(h,"input",{enumerable:true,value:"ああああああ"}); 4Object.defineProperty(h,"hidden_data",{enumerable:false,value:"いいいいいい"}); 5console.dir(Object.entries(h));

なおオブジェクトの種類によってはユーザーが任意に上書きできるプロパティとそうでないものがあり、ユーザーが任意に設定したプロパティを上書きさせなくすることも可能です。enumerableで列挙をコントロールすることも可能です

投稿2023/06/29 00:08

編集2023/06/29 01:29
yambejp

総合スコア114843

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

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

0

この回答はGPT-4による自動生成回答です

JavaScriptのmatchメソッドが返すのは、一見すると配列のように見えますが、実際には配列に似たオブジェクト(Array-like object)です。これは、配列のようにインデックスでアクセスでき、lengthプロパティも持っていますが、配列のメソッドを全て持っているわけではないという特性を持っています。

matchメソッドが返すオブジェクトは、マッチした結果を格納する配列に加えて、indexinputといった追加のプロパティを持っています。これらはマッチした位置や元の文字列を示すためのものです。

したがって、以下のようなコードはエラーになります。

javascript

1const h=[ '111111','222222',index: 0,input: 'ああああああ' ]

これは配列リテラルの中にオブジェクトリテラルを混在させているためです。配列の要素としてオブジェクトを持つことは可能ですが、その場合は以下のように書く必要があります。

javascript

1const h=[ '111111','222222', {index: 0, input: 'ああああああ'} ]

しかし、これはmatchメソッドの返り値とは異なる構造になります。matchメソッドの返り値のようなオブジェクトを作るには、以下のようにすることができます。

javascript

1const h = ['111111', '222222']; 2h.index = 0; 3h.input = 'ああああああ';

これにより、hmatchメソッドの返り値と同じような構造のオブジェクトになります。

投稿2023/06/28 11:01

teratail-ai

Powered by GPT-4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問