FullStackOpen Part4-a 演習の気づき

nodeの新規アプリケーション作成でやること

  1. 適切なフォルダで"npm init"でプロジェクト作成

  2. package.jsonのscriptsに"start": "node index.js"を追記

  3. Expressをインストール(npm install express)

  4. nodemonをインストール(npm install --save-dev nodemon) & package.jsonのscriptsに"dev": "nodemon index.js"を追記

  5. その他必要なものをインストール(npm install:)

    1. cors

    2. mongoose

    3. dotenv

    4. morgan

    5. eslint("npm install eslint --save-dev", "npx eslint --init" envに'node': trueを追加, packageのscriptsに"ling": "eslint .")

    6. jest ("npm install jest --save-dev", "test: jest --verbose", packageの末尾に"jest": { "testEnvironment": "node" }追加


テストを単一で実施したいときはtest()からtest.only()に書き換える

配列操作をしたいときはlodashを使うと便利
npm install lodash

ドキュメントはこちら

あるオブジェクト配列から最も頻繁に出てくる特定のプロパティの値を見つけるには、Lodash の _.countBy_.maxBy_.get といった関数を組み合わせて使用すると効率的です。以下に具体的な実装例を示します。この例では、オブジェクト配列 items から最も頻繁に出てくる color プロパティの値を見つけます:

ChatGPT
javascriptCopy codeconst _ = require('lodash');

const items = [
    { color: 'blue', name: 'item1' },
    { color: 'red', name: 'item2' },
    { color: 'blue', name: 'item3' },
    { color: 'green', name: 'item4' },
    { color: 'blue', name: 'item5' },
    { color: 'red', name: 'item6' },
    { color: 'blue', name: 'item7' },
];

const colorCounts = _.countBy(items, 'color'); // { 'blue': 4, 'red': 2, 'green': 1 }
const mostCommonColor = _.get(_.maxBy(_.entries(colorCounts), _.last), 0); // 'blue'

console.log(mostCommonColor); // Output: 'blue'

この例の各ステップの詳細:

  1. _.countBy(items, 'color')items 配列の各オブジェクトに対して、color プロパティの値ごとの出現回数を計算します。結果として出現回数のオブジェクトが生成されます。

  2. _.entries(colorCounts):出現回数のオブジェクトを [key, value] 形式の配列に変換します。

  3. _.maxBy(_, _.last):変換された配列に対して、_.last(つまり、出現回数)が最大のエントリ([key, value])を見つけます。

  4. _.get(_, 0):最大出現回数のエントリから、キー(つまり、色)を取得します。これが最も頻繁に出てくる色です。

likesの合計が最も多いauthor

const mostLikes = (blogs) => {
    const blogsByAuthor = lodash.groupBy(blogs, 'author')
    const likesByAuthor = lodash.map(blogsByAuthor, (blogs, author) => {
        return {
            author: author,
            likes: lodash.sumBy(blogs, 'likes')
        }
    })
    const authorWithMostLikes = lodash.maxBy(likesByAuthor, 'likes')
    return authorWithMostLikes
}

まず、_.groupBy()を使って著者ごとにブログの配列をグループ化します。その後、_.map()を使って各著者の合計いいね数を計算します。最後に、_.maxBy()を使って最も多くのいいねを持つ著者を見つけます。

ChatGPT

いいなと思ったら応援しよう!