저는 Google Apps Script / Javascript를 처음 사용하며 더 빠르게 만들기 위해 원래 코드의 두 번째 반복 작업을 진행 중입니다. 내 첫 번째 코드는 기본 Google 시트에 대한 많은 가져 오기 및 설정을 수행했지만 이제 수정 된 값을 설정하기 전에 배열에서 모든 작업을 수행하려고합니다. 내가 붙어있는 현재 코드 블록은 map 함수를 실행하는 동안 indexOf를 실행하려는 시도입니다.
아래 스크립트는 작업 표 데이터로 가득 찬 배열의 모든 행을 실행하고 열을 다양하게 수정하고 새 열 값을 계산합니다.
var = amendedTimesheetData = timesheetdata.map(function(item){
item.splice(2, 0, item[0] + " " + item[1]);
item.splice(4, 0, item[0].slice(0, 2) + item[1].slice(0, 2) + date(item[3]));
item.splice(0, 2);
item.splice(3, 0, "Open");
item.splice(4, 0, accountingCode); //SEE ISSUE BELOW
return item
})
}
계정 코드 변수는 배열 열 중 하나의 값을 기반으로 vlookup의 Javascript 버전을 수행 한 것에 의존합니다. 조회 값 은 시트의 다른 탭에서 가져온 다른 배열에 있습니다. 조회를 수행하는 코드는 다음과 같습니다.
var timeTrackingCode = item[6]; //this is the location in the mapped array of the value to be looked up
var timeTrackingCodeRow = codeMappingData.map(function(r){ return r[0]; }).indexOf(timeTrackingCode);
var accountingCode = codeMappingData[timeTrackingCodeRow][1]
위 코드의 공식 은 map 함수가 실행되기 전에 부모 함수에서 이전에 만들어진 codeMappingData 변수 에 의존 합니다.
var codeMappingSheet = ss.getSheetByName('CodeMapping');
var codeMappingRange = codeMappingSheet.getDataRange();
var codeMappingData = codeMappingRange.getValues();
질문 : map 함수 에서 codeMappingData 배열을 어떻게 참조 합니까?
이 문제를 해결하는 다른 옵션은 맵과 별도로 For 루프를 실행하는 것이지만 모든 가능성을 배우려고 노력하면서 변수를 전달하고 모든 열 조작을 수행하는 방법을 이해하려고 노력하고 있습니다. 가능한 한 적은 코드. 변수 전달 방법에 대한 지침이나 코드가 더 효율적일 수있는 방법에 대한 팁은 모두 매우 가치가 있습니다. 나는 약간의 코드만을 복사했기 때문에 문맥이 부족할 수 있지만 질문은 분명하다고 생각합니다.
Map 함수 내에서 codeMappingData 변수를 설정하는 것은 좋지 않다고 가정했습니다. 행을 반복 할 때마다 시트에서 가져 오기를 수행하기 때문입니다. 내가 이것을 가정하는 것이 틀렸다면 아마도 가장 간단한 방법은 맵 내에서 변수를 설정하는 것입니다.
감사합니다,
내부 또는 하위 범위는 항상 외부 또는 상위 범위의 변수에 액세스 할 수 있습니다.
function outerFunction(){
const outerScopeVar = 5;
const arr = [1,2,3];
arr.map(num => {
console.info(`I have access to both inner and outer scope variable: ${num} and ${outerScopeVar}`);
})
}
outerFunction();
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다