回答編集履歴
1
おまけ追加
test
CHANGED
@@ -31,3 +31,39 @@
|
|
31
31
|
});
|
32
32
|
console.log("おわり");
|
33
33
|
```
|
34
|
+
|
35
|
+
---
|
36
|
+
|
37
|
+
おまけ: 途中まで処理しないとbreakできるか出来ないのかわからないケースが困る
|
38
|
+
|
39
|
+
ネイティブJSで全く道具が足りてない中、頑張ってリスト操作をやろうとするのがそもそもの過ちですね。
|
40
|
+
LodashやRamda.jsみたいなライブラリの力を借りるべきです。
|
41
|
+
[Lodash: partition](https://lodash.com/docs/4.17.15#partition)の前半部だけ取り出して使うとかやればbreak的な事も実現出来ます。
|
42
|
+
|
43
|
+
ネイティブJSでやるならば
|
44
|
+
共通部分まで[map](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map)で加工、
|
45
|
+
[findIndex](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex)で添字を引き出して
|
46
|
+
sliceで切り取るというアプローチになるでしょうか。
|
47
|
+
|
48
|
+
reduceでステートを管理するようなアプローチもあるけど微妙。
|
49
|
+
|
50
|
+
```js
|
51
|
+
fs.readdir("./", (err, files) => {
|
52
|
+
files
|
53
|
+
.reduce((obj, it) => {
|
54
|
+
// for文の1行目でcontinueする作戦と同じ事をやることでbreak風の処理を実現
|
55
|
+
if (!obj.state) return obj;
|
56
|
+
obj.result.push(it);
|
57
|
+
// ある程度の処理が終わったら改めて継続条件の設定を行う
|
58
|
+
if (obj.result.length >= 6) obj.state = false;
|
59
|
+
return obj;
|
60
|
+
}, {result: [], state: true})
|
61
|
+
.result
|
62
|
+
.forEach(it => console.log(it));
|
63
|
+
});
|
64
|
+
```
|
65
|
+
|
66
|
+
そもそも速度を考慮するのであれば、
|
67
|
+
mapやforEachを使わず[for...of](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for...of)を使いましょう。
|
68
|
+
ネイティブJSはPromiseの逐次処理もfor...ofがないとお話にならないので、結局for文からは逃げられません。
|
69
|
+
ライブラリもfor文使うのも嫌なら、ClojureScriptやElmみたいな別言語に移住するべきでしょう。
|