johngrib / johngrib-jekyll-skeleton

my github.io jekyll blog skeleton
MIT License
76 stars 111 forks source link

generateData.js 코드 수정 #33

Closed yujonglee closed 3 years ago

yujonglee commented 3 years ago

안녕하세요. 제가 generateData.js에 저에게 필요한 기능을 추가하면서 기존 코드를 조금 수정하였는데요, 혹시 그 중 일부가 여기 johngrib-jekyll-skeleton에도 반영되면 좋지 않을까 해서 PR을 보내기 전에 이슈를 올려봅니다. 아래는 그 목록입니다.

제가 잘못 생각한 것이 있다면 말씀해주세요!. 감사합니다.

  1. 5번 라인에서 const path = './_wiki'가 선언된 후 사용되지 않아 삭제하였습니다.
  2. 26번, 49번, 56번, 167번 라인에서 toLowerCase().localeCompare가 포함된 비교함수가 반복적으로 등장하여 중복을 제거했습니다.
    function lexicalOrderingBy(property) {
    return (a, b) => a[property].toLowerCase().localeCompare(b[property].toLowerCase())
    }

    와 같이 비교함수를 리턴하는 함수를 만들어 다음과 같이 수정해봤습니다.

    
    /// 26번 라인
    // 이전 
    return a.fileName.toLowerCase().localeCompare(b.fileName.toLowerCase());
    //이후
    return lexicalOrderingBy('fileName')

//49번 라인은 26번 라인과 동일

// 56번 라인 // 이전 return a.url.toLowerCase().localeCompare(b.url.toLowerCase()); // 이후 return lexicalOrderingBy('url')

// 167번 라인 // 이전 (a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()); // 이후 (a, b) => lexicalOrderingBy('name')


3. 화살표 함수로 교체
현재 166번 라인만 화살표 함수로 되어 있는데, forEach의 콜백이나 다른 함수들도 화살표 함수로 바꿔봤습니다.
예를 들어 
```javascript
const dataList = list.map(function collectData(file) {

    const data = fs.readFileSync(file.path, 'utf8');
    return parseInfo(file, data.split('---')[1]);

}).filter(function removeNullData(row) {

    return row != null;

}).filter(function removePrivate(row) {

    return row.public != 'false';

}).sort(function sortByFileName(a, b) {

    return a.fileName.toLowerCase().localeCompare(b.fileName.toLowerCase());

});

이 코드에서 처음 map콜백을 따로 함수로 빼고, 마지막 sort콜백을 lexicalOrderingBy로 바꾸면 아래와 같습니다.

const dataList = list.map(file => collectData(file))
                     .filter((row) => row != null)
                     .filter((row) => row.public != 'false')
                     .sort(lexicalOrderingBy('fileName'))
  1. var, let으로 작성된 코드를 모두 const로 바꿔봤습니다.
  2. 47번 라인의 tag가 선언되지 않아 const를 붙여줬습니다.
    //아래와 같이 작성되어 있었습니다.
    for (tag in tagMap) {
    tagMap[tag].sort(function sortByFileName(a, b) {
        return a.fileName.toLowerCase().localeCompare(b.fileName.toLowerCase());
    });
    }
johngrib commented 3 years ago

안녕하세요. 제가 generateData.js에 저에게 필요한 기능을 추가하면서 기존 코드를 조금 수정하였는데요, 혹시 그 중 일부가 여기 johngrib-jekyll-skeleton에도 반영되면 좋지 않을까 해서 풀리퀘스트를 보내기 전에 이슈를 올려봅니다.

안녕하세요. 제 블로그 뼈대에 관심을 가져주셔서 감사합니다. 처음에 여러 파일로 쪼개놨던 걸 합쳐놓은 것이라 여기저기 중복이 있어요. 대충 만든거라 보시기에 괴로우셨을 것 같습니다. 제안해주신 사항이 좋습니다. PR로 보내주셔도 좋겠습니다.