2015-01-02 1 views
1

나는 node.js 프로젝트에서 lodash/underscore를 열렬히 사용하고 있으며 반복적으로 반복해야하는 상황에 처하게됩니다. 오른쪽에서 배열 (모든 통화 동기 것으로 가정) 아래의 코드와 유사한 방식으로 왼쪽으로 :언더 코어/로다시를 사용하여 자바 스크립트에서 비 돌연변이 역 테일을 수행하는 가장 좋은 방법

function makeDir(pathArray) { 
    var unsulliedPath = clone(pathArray); 
    var lastGuy = pathArray.pop(); 
    var restOfEm = pathArray; 
    if dirExists(unsulliedPath) { 
    console.log("Your job is done!"); 
    } else { 
    makeDir(restOfEm); 
    makeDir(unsulliedPath); 
    } 
} 

그러나, 복제하고 pathArray 인수 버그에게 나를 돌연변이 가졌어요. 그래서 나는이 작업을 수행 할 수 있습니다 :

function makeDir(pathArray) { 
    var lastGuy = _.last(pathArray); 

    // EITHER I could... 
    var restOfEm = _(pathArray).reverse().tail().reverse().value(); 
    // OR I could do... 
    var restOfEm = _.first(pathArray, pathArray.length - 1); 

    if dirExists(pathArray) { 
    console.log("Your job is done!"); 
    } else { 
    makeDir(restOfEm); 
    makeDir(pathArray); 
    } 
} 

좋아, 그 전달 된 인수를 복제 할 필요를 돌봐 주문, 그래도 약간 못생긴 밑줄 그..

lodash/밑줄에는 _.rest()의 역함수를 얻는 더 간단하고 명확한 방법, 즉 마지막 요소를 제외한 모든 요소가 포함되어 있습니까? 그렇지 않다면 Javascript에서 lodash/underscore 스타일의 함수 라이브러리와 함께 사용하기 위해이 메서드를 구현하는 데 선호되는 관용적 솔루션이 있습니까? 아니면 간단히이 피킹입니까?

미리 감사드립니다. 내 질문에서 눈부신 누락 또는 오류가 있으면 사과드립니다.

+0

보인다. 'mkdirp' 패키지를 사용하지 않는 이유는 무엇입니까? – tkone

+0

이것은 매우 좋은 질문입니다. 파일 시스템 트리의 폴더와 파일이 문서 DB의 문서와 일치하는 시스템을 구축하고 있습니다./foo/bar/pictures 디렉토리의 모든 그림은/foo/bar/pictures 디렉토리와 마찬가지로 메타 데이터가있는 mongo 문서를 가지고 있습니다. 파일/폴더 자체는 물론 디렉토리 디렉토리의 문서가 있는지 확인하려고합니다. 희망은 내 생각에 대해 괜찮은 설명 이네. : 3 – Chazu

+0

이것은 당신을 위해 검증을하지 않습니다 - 이것은 단지 디렉토리가 생성되도록합니다. mkdirp를 사용할 수도 있고, 파일을 쓸 때마다 목록과 비교하여 파일을 검증 할 수 있습니다. 거래가 끝나면 확인되지 않은 항목을 확인하십시오. – tkone

답변

3

왜 밑줄/로다시를 사용해야합니까?

var last = pathArray.slice(-1)[0]; 
var rest = pathArray.slice(0, -1); 

slice은 ... 모든 아주 쉽게 당신을 위해 이것을 할 것입니다

0

사용 Array.splice https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice하고 원본을 수정하지 않는 경우, Array.slice는 원래 다음 배열을 복사 할 .접착.

예 : 당신이 MKDIR -p``에 노력하고있는 것처럼

var rest = pathArray.slice(0); 
var last = rest.splice(-1, 1)[0]; 
+1

또는 @ tkone의 솔루션처럼 슬라이스를 사용할 수도 있습니다. – unobf

+0

그래, 문제는 이것이 원래의 배열을 변형시키는 것입니다. copy를 복사 한 후 mutate하기 위해서는'var last = pathArray.slice (0) l var rest = last.splice (-1, 1);' – tkone