回答編集履歴

5

期待する挙動に適応

2022/01/26 14:39

投稿

int32_t
int32_t

スコア20909

test CHANGED
@@ -1,3 +1,18 @@
1
+ コメントで述べられた挙動ですと、以下のような手順で:
2
+
3
+ * 上に動かす場合、`s.options`を昇順にループ
4
+ * `s.optoins[i]` が選択済みであった場合
5
+ * `i`が`0`なら終了、そうでないなら`s.options[i]`と `s.options[i - 1]` を`s.insertBefore()`で入れ替える
6
+ * 下に動かす場合、`s.options`を降順にループ
7
+ * `s.options[i]` が選択済みであった場合
8
+ * `i` が `s.options.length - 1` なら終了、そうでないなら `s.options[i]`と `s.options[i + 1]` を`s.insertBefore()` で入れ替える
9
+
10
+
11
+
12
+ ----
13
+
14
+ 以下は期待する動作と違うボツ案です。
15
+
1
16
  複数選択の場合にどういう挙動が欲しいのかちょっとピンとこないのですが(1と3が選択されている場合は?)、選択されたoptionを上か下に集めるという挙動なら、以下のような手順でどうでしょうか。
2
17
 
3
18
  1. `s.options` を配列化する `let opts = [...s.options];`

4

nits

2022/01/26 12:29

投稿

int32_t
int32_t

スコア20909

test CHANGED
@@ -1,6 +1,6 @@
1
1
  複数選択の場合にどういう挙動が欲しいのかちょっとピンとこないのですが(1と3が選択されている場合は?)、選択されたoptionを上か下に集めるという挙動なら、以下のような手順でどうでしょうか。
2
2
 
3
- 1. `s.options` を配列化する `[...s.options]`
3
+ 1. `s.options` を配列化する `let opts = [...s.options];`
4
4
  2. 上に集める場合、その配列を走査して未選択optionを順に`s.appendChild()`する。
5
5
  3. 下に集める場合、その配列を走査して選択済みのoptionを順に`s.appendChild()`する。
6
6
 

3

手順の改善

2022/01/26 12:28

投稿

int32_t
int32_t

スコア20909

test CHANGED
@@ -1,6 +1,6 @@
1
1
  複数選択の場合にどういう挙動が欲しいのかちょっとピンとこないのですが(1と3が選択されている場合は?)、選択されたoptionを上か下に集めるという挙動なら、以下のような手順でどうでしょうか。
2
2
 
3
3
  1. `s.options` を配列化する `[...s.options]`
4
+ 2. 上に集める場合、その配列を走査して未選択optionを順に`s.appendChild()`する。
4
- 2. その配列から、`filter()` で「選択済みのoption配列」と「未選択のoption配列」を作
5
+ 3. 下に集める場合、その配列を走査して選択済みのoptionを順に`s.appendChild()`す
5
- 3. 上に集める場合、前者配列・後者配列の順ですべてを `s.appendChild()` する。下に集める場合、後者配列・前者配列の順ですべてを`s.appendChild()`する
6
6
 

2

文言

2022/01/26 12:01

投稿

int32_t
int32_t

スコア20909

test CHANGED
@@ -1,4 +1,4 @@
1
- 複数選択の場合にどういう挙動が欲しいのかちょっとピンとこないのですが、選択されたoptionを上か下に集めるという挙動なら、以下のような手順でどうでしょうか。
1
+ 複数選択の場合にどういう挙動が欲しいのかちょっとピンとこないのですが(1と3が選択されている場合は?)、選択されたoptionを上か下に集めるという挙動なら、以下のような手順でどうでしょうか。
2
2
 
3
3
  1. `s.options` を配列化する `[...s.options]`
4
4
  2. その配列から、`filter()` で「選択済みのoption配列」と「未選択のoption配列」を作る

1

文言

2022/01/26 11:59

投稿

int32_t
int32_t

スコア20909

test CHANGED
@@ -1,5 +1,4 @@
1
- 複数選択ですから`s.selectedIndex` はっさい参照すべきではすね
1
+ 複数選択の場合にどういう挙動が欲しいのかちょっとピンとこないのです選択されたoptionを上か下に集めるとう挙動ら、以下のような手順どうでしょうか
2
- 以下のような手順でどうでしょうか。
3
2
 
4
3
  1. `s.options` を配列化する `[...s.options]`
5
4
  2. その配列から、`filter()` で「選択済みのoption配列」と「未選択のoption配列」を作る