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

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

新規登録して質問してみよう
ただいま回答率
85.35%
配列

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

910閲覧

React 配列要素比較の書式が不明

bbTeratail

総合スコア2

配列

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/12/05 13:02

お世話になります。
Reactの配列要素比較の書式で悩んでおります。

全体のプログラムは拙くてお恥ずかしいので
お聞きしたい部分をスポットで記載いたします。

まず、
const [path, setpath] = useState([])
state(配列)を宣言しています。

path = [
{path1: 111,path2: 111},
{path1: 222,path2: 222},
{path1: 333,path2: 333},
・・・
]
のように、
setpathで配列を追加してゆきます。

ここで、以下のように配列要素を比較抽出し処理しようと思ったのですが

<?????>の部分がうまく表現出来ません。

if (JSON.stringify(path[添え字] == <?????> )){
処理;
}else{
別処理;
}

例えば、
path[0]だと、{path1: 111,path2: 111}なので、
(JSON.stringify(path[0] == '{path1: 111,path2: 111}' ))
などとしてみましたがヒットしませんでした。

この表現自体(ifなど)が間違っているのでしょうか?!

質問の仕方もこれでよいのかわからずですが
よろしくお願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/12/05 13:54

その if の条件を言葉(日本語)で書くと、どのようなものでしょうか?
退会済みユーザー

退会済みユーザー

2021/12/05 14:30

多分こういうことをしたいのかなという推測で回答してみました。
hoshi-takanori

2021/12/05 18:29

JSON.stringify だと、プロパティの順番は保証されないのでは…。
bbTeratail

2021/12/06 02:19

kilesaさん 数度の詳細回答ありがとうございます。 只今、ご回答の内容を調べながら確認しております。 本日中に一旦、ご報告をさせてください。 (当方、そんなレベルです・・・)
bbTeratail

2021/12/06 02:57 編集

hoshi-takanoriさん JSON.stringifyのプロパティ順序の件、 ありがとうございます。 こちらも調査しながら確認します。 失礼いたします。
guest

回答1

0

ベストアンサー

path[0] の path1プロパティが111で、かつ、path2プロパティが111であるという条件式を、path[0]をJSONにした文字列での比較でやりたい、ということなのであれば、以下でよいかと。

javascript

1if (JSON.stringify(path[0]) === '{"path1":111,"path2":111}') {

???? サンプル

さはさりながら、JSONにしなくても以下でできます。

javascript

1if (path[0].path1 === 111 && path[0].path2 === 111) {

???? サンプル

追記

質問への追記・修正で、hoshi-takanoriさんがご指摘のとおり、JSON.stringify によって、
{path1: 111,path2: 111}
という(リテラルで書かれて生成された)オブジェクトをJSONにしたときに、
{"path1":111,"path2":111}
というように、キーの並び順がリテラルで書いたのと同じ順で、先に"path1"、後に "path2" という文字列になることを前提として文字列の比較をするのは、たとえ意図した判定ができたとしても、いわば結果オーライなコードといわざるを得ません。

これを、元のオブジェクトが{path1: 111,path2: 111} というリテラルで書かれても、あるいは"path1"と"path2" とを逆にした{path2: 111,path1: 111}というリテラルで書かれたものであっても、JSONにしたときに、キーが昇順にソートされた、

{"path1":111,"path2":111}

を得るには、以下のモジュールを使えばよいです。

javascript

1const stringify = require("json-stable-stringify"); 2 3const obj = { path2: 111, path1: 111 }; 4const json = stringify(obj); 5console.log(json); // => {"path1":111,"path2":111}

ただし、このような、JSONにしたときのキーの順番に配慮したコードを書くよりは、先の回答に書いたように、JSONにしないで判定できればそれに越したことはないと思います。

投稿2021/12/05 14:23

編集2021/12/06 02:30
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

bbTeratail

2021/12/10 00:53

お世話になります。 返答遅れました。 すいませんでした。 ご回答いただいた内容を自分なり調査し ようやく確認できました。 JSON.stringifyの有無の書式両方ともヒット出来ました。 ありがとうございます。 そして、 上記質問内の「処理;」に別の問題も出てきて別スレで質問の予定です。 ちなみに配列の要素削除です。 (stateだと思うように削除されないですね・・・) とりあえずこの件は解決です。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2021/12/10 01:07

解決されたとのことでよかったです ????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問