配列を並べ替えると、配列の順序が狂ってしまいます

オールドボーイ

私は今とても混乱しています。私はこの1時間と、作成日に基づいてディレクトリを並べ替えるのに少し時間を費やしました。これが私がいるところです:

const
  fsPromises = require('fs').promises
let
  arr = []

fsPromises.readdir(rootPath, 'utf8')
.then((array)=>{

  array.forEach((dir)=>{
    console.log(dir) // executed last for some reason
    fsPromises.stat(`./Projects/${dir}`)
    .then((stats)=>{
      arr.push([stats.birthtimeMs, dir])
    })
  })

})
.then(()=>{
  arr = arr.sort((a,b)=>{
    Math.floor(a[0])-Math.floor(b[0])
  })
})
.then(console.log(arr))

ファイナルthenが順序付けられていない配列を吐き出している理由がわかりません

Promiseは私にとって新しいので、問題の原因がPromiseチェーンであるかどうかは完全にはわかりませんが、2番目まではすべて問題ないようthenです。

どんな助けでも大歓迎です。

アマダン

それはプロミスチェーンです。チェーンがどこかで壊れていると、機能しません。

2つの矢印形式を混同しているようです:(params) => expression(params) => { statements }あなたのコードのすべてが前者で表現できるので、私はそれを使いました。ステートメントブロック形式に変換する場合は、忘れないでくださいreturn(式形式は暗黙的に行います)。

矢印ステートメントブロックからpromiseを返さないため、次のpromiseは前のpromiseにステッチされません。したがって、待機が発生することはなく、意図したよりもはるかに同期して実行されます。さらに、複数のプロミスがある場合は、を使用してすべてのプロミスを実行する準備ができるまで待つ必要がありますPromise.allこれにより、すべてのサブプロミスが実行されるというプロミスが作成され、サブプロミスの結果の配列が返されます。

fsPromises.readdir(rootPath, 'utf8')
.then(array => Promise.all(
    array.map(dir =>
        fsPromises.stat(`./Projects/${dir}`)
        .then(stats => [stats.birthtimeMs, dir])
    )
))
.then(arr =>
  arr.sort((a, b) =>
    Math.floor(a[0]) - Math.floor(b[0])
  )
)
.then(arr => console.log(arr))

(私はこれをチェックしなかったので、偶然のドラゴンがあるかもしれません。)

したがって、最初readdirにファイルの配列を約束します。この配列をマップして、ファイル名ごとにstat統計情報を約束し、タプルの約束にチェーンします。したがってarray.map、タプルpromiseの配列を返します。Promise.all一連のpromiseを受け取り、それらがすべて完了すると、それらのpromiseの一連の結果を約束します。これを、ソートされた配列の約束にチェーンし、次に、配列をログに記録するコンソールの約束にチェーンします。

編集: わかり ません Promise.all が、Node.jsコアに存在しないと思います Node.jsには、含まれているpromiseパッケージがいくつもありますが Promise.all 、ほとんどすべてが含まれています Bluebirdなど )。または、 自分 実装することもできますが 、それほど大きくはありません。

EDIT2:環境でサポートされている場合はasync/に切り替えることをお勧めします。awaitこれにより、コードが以前のものに非常に似たものになります。ただし、すべての約束は内部で行われるため、約束についてある程度理解する必要があります。:P

async function statDir() {
  let files = await fsPromises.readdir(rootPath, 'utf8');
  let stats = [];
  for (let file of files) {
    let stat = await fsPromises.stat(`./Projects/${file}`);
    stats.push([stat.birthtimeMs, file]);
  }
  stats.sort((a, b) =>
    Math.floor(a[0]) - Math.floor(b[0])
  );
  console.log(stats);
}
statDir();

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

phpは、配列値を順序が狂っている別の配列値に置き換えます

分類Dev

PHPは、別の配列で定義された順序に従って配列を並べ替えます

分類Dev

Javascriptアンダースコアを使用して、別の配列順序に基づいて配列順序を並べ替えます

分類Dev

コンパレータを使用して別の配列(長さが異なる)に従って配列を並べ替えると、順序が正しくなくなります

分類Dev

別の配列で定義された並べ替え順序に従って、配列を所定の位置に並べ替えます

分類Dev

JavaScript:順列の順序に基づいて配列を並べ替えますか?

分類Dev

jsonから最も出現する文字列をキーの順序で並べ替えると、順序には配列自体が含まれます

分類Dev

別の配列に基づいて複数の配列を並べ替える並べ替え順序

分類Dev

別の配列の並べ替え順序に基づいて配列を並べ替える

分類Dev

順序付けられた配列パターンに従ってbash配列を並べ替えます

分類Dev

CUDA:推力を使用して別の配列で定義された順序に従って配列を並べ替えます

分類Dev

配列を並べ替えて一致する要素をグループ化しますが、元の順序を維持します

分類Dev

sortOn():配列のコピーを並べ替えようとしていますが、元の配列も並べ替えられています

分類Dev

ArraySortコールバックが配列を正しい順序で並べ替えていません

分類Dev

2つの配列をマージして降順で並べ替えようとしています

分類Dev

配列を並べ替えて順序を維持する

分類Dev

Javascriptは他の配列の順序で並べ替えます

分類Dev

文字列配列の順序に基づいてArrayListを並べ替える-Java

分類Dev

Javascriptで数値配列の並べ替え手順を実行しようとしています

分類Dev

別の配列の順序で配列を並べ替える

分類Dev

別の配列の順序に基づいて配列の配列を並べ替える(Ruby)

分類Dev

別の配列の順序に基づいて配列の配列を並べ替える

分類Dev

JS:配列で指定された順序を維持しながら、2つの異なるプロパティでJSON配列を並べ替えます

分類Dev

rubyは、文字列部分が空の文字列を保持している日付の配列を並べ替えます

分類Dev

文字列の配列を並べ替え、別の文字列の配列を使用して順序を決定します

分類Dev

別の配列の並べ替え順序に基づいて複数の配列を並べ替えるにはどうすればよいですか?

分類Dev

配列を別の配列と同じ順序で並べ替える

分類Dev

ある配列を別の配列と比較して並べ替えてから、その配列内で並べ替えます

分類Dev

カスタムの並べ替え順序配列に基づいて JSON を並べ替える

Related 関連記事

  1. 1

    phpは、配列値を順序が狂っている別の配列値に置き換えます

  2. 2

    PHPは、別の配列で定義された順序に従って配列を並べ替えます

  3. 3

    Javascriptアンダースコアを使用して、別の配列順序に基づいて配列順序を並べ替えます

  4. 4

    コンパレータを使用して別の配列(長さが異なる)に従って配列を並べ替えると、順序が正しくなくなります

  5. 5

    別の配列で定義された並べ替え順序に従って、配列を所定の位置に並べ替えます

  6. 6

    JavaScript:順列の順序に基づいて配列を並べ替えますか?

  7. 7

    jsonから最も出現する文字列をキーの順序で並べ替えると、順序には配列自体が含まれます

  8. 8

    別の配列に基づいて複数の配列を並べ替える並べ替え順序

  9. 9

    別の配列の並べ替え順序に基づいて配列を並べ替える

  10. 10

    順序付けられた配列パターンに従ってbash配列を並べ替えます

  11. 11

    CUDA:推力を使用して別の配列で定義された順序に従って配列を並べ替えます

  12. 12

    配列を並べ替えて一致する要素をグループ化しますが、元の順序を維持します

  13. 13

    sortOn():配列のコピーを並べ替えようとしていますが、元の配列も並べ替えられています

  14. 14

    ArraySortコールバックが配列を正しい順序で並べ替えていません

  15. 15

    2つの配列をマージして降順で並べ替えようとしています

  16. 16

    配列を並べ替えて順序を維持する

  17. 17

    Javascriptは他の配列の順序で並べ替えます

  18. 18

    文字列配列の順序に基づいてArrayListを並べ替える-Java

  19. 19

    Javascriptで数値配列の並べ替え手順を実行しようとしています

  20. 20

    別の配列の順序で配列を並べ替える

  21. 21

    別の配列の順序に基づいて配列の配列を並べ替える(Ruby)

  22. 22

    別の配列の順序に基づいて配列の配列を並べ替える

  23. 23

    JS:配列で指定された順序を維持しながら、2つの異なるプロパティでJSON配列を並べ替えます

  24. 24

    rubyは、文字列部分が空の文字列を保持している日付の配列を並べ替えます

  25. 25

    文字列の配列を並べ替え、別の文字列の配列を使用して順序を決定します

  26. 26

    別の配列の並べ替え順序に基づいて複数の配列を並べ替えるにはどうすればよいですか?

  27. 27

    配列を別の配列と同じ順序で並べ替える

  28. 28

    ある配列を別の配列と比較して並べ替えてから、その配列内で並べ替えます

  29. 29

    カスタムの並べ替え順序配列に基づいて JSON を並べ替える

ホットタグ

アーカイブ