teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

テキスト追加

2021/12/06 02:30

投稿

退会済みユーザー
answer CHANGED
@@ -35,4 +35,4 @@
35
35
  console.log(json); // => {"path1":111,"path2":111}
36
36
  ```
37
37
 
38
- ただし、このようなJSONにしたときのキーの順番に配慮しなければならないのであれば、先のJSONにしない判定をすればそれで事足りるのでと思います。
38
+ ただし、このようなJSONにしたときのキーの順番に配慮したコードを書くよりは、先の回答に書いたように、JSONにしない判定できればそれに越したことないと思います。

2

テキスト追加

2021/12/06 02:30

投稿

退会済みユーザー
answer CHANGED
@@ -9,4 +9,30 @@
9
9
  ```javascript
10
10
  if (path[0].path1 === 111 && path[0].path2 === 111) {
11
11
  ```
12
- ???? [サンプル](https://codepen.io/kilesa/pen/YzrwKPj?editors=0010)
12
+ ???? [サンプル](https://codepen.io/kilesa/pen/YzrwKPj?editors=0010)
13
+
14
+ ### 追記
15
+
16
+ 質問への追記・修正で、hoshi-takanoriさんがご指摘のとおり、JSON.stringify によって、
17
+ `{path1: 111,path2: 111}`
18
+ という(リテラルで書かれて生成された)オブジェクトをJSONにしたときに、
19
+ `{"path1":111,"path2":111}`
20
+ というように、キーの並び順がリテラルで書いたのと同じ順で、先に"path1"、後に "path2" という文字列になることを前提として文字列の比較をするのは、たとえ意図した判定ができたとしても、いわば結果オーライなコードといわざるを得ません。
21
+
22
+ これを、元のオブジェクトが`{path1: 111,path2: 111}` というリテラルで書かれても、あるいは"path1"と"path2" とを逆にした`{path2: 111,path1: 111}`というリテラルで書かれたものであっても、JSONにしたときに、キーが昇順にソートされた、
23
+
24
+ `{"path1":111,"path2":111}`
25
+
26
+ を得るには、以下のモジュールを使えばよいです。
27
+
28
+ - [json-stable-stringify](https://github.com/substack/json-stable-stringify)
29
+
30
+ ```javascript
31
+ const stringify = require("json-stable-stringify");
32
+
33
+ const obj = { path2: 111, path1: 111 };
34
+ const json = stringify(obj);
35
+ console.log(json); // => {"path1":111,"path2":111}
36
+ ```
37
+
38
+ ただし、このようなJSONにしたときのキーの順番に配慮しなければならないのであれば、先のJSONにしない判定をすればそれで事足りるのでは?と思います。

1

テキスト追加

2021/12/06 01:52

投稿

退会済みユーザー
answer CHANGED
@@ -3,4 +3,10 @@
3
3
  ```javascript
4
4
  if (JSON.stringify(path[0]) === '{"path1":111,"path2":111}') {
5
5
  ```
6
- ???? [サンプル](https://codepen.io/kilesa/pen/OJxyKvB)
6
+ ???? [サンプル](https://codepen.io/kilesa/pen/OJxyKvB?editors=0010)
7
+
8
+ さはさりながら、JSONにしなくても以下でできます。
9
+ ```javascript
10
+ if (path[0].path1 === 111 && path[0].path2 === 111) {
11
+ ```
12
+ ???? [サンプル](https://codepen.io/kilesa/pen/YzrwKPj?editors=0010)