안녕하세요. 일련 번호를 함수로 원래 숫자를 반환하는 배열로 변경해야하는 문제에 대해 작업하고 있습니다. 그래서 우리는 [2] 대신에 a2를 반환합니다.배열을 함수 배열로 변환하는 JavaScript
나는 대답을 원한다. 단지 힌트가 필요하다. 배열을 통해 반복 할 수 및 .pop() 배열의 마지막 값을 얻으려면 사용할 수 있지만 그 다음 거기에서 함수로 변환하는 방법을 몰라. 어떤 힌트?
안녕하세요. 일련 번호를 함수로 원래 숫자를 반환하는 배열로 변경해야하는 문제에 대해 작업하고 있습니다. 그래서 우리는 [2] 대신에 a2를 반환합니다.배열을 함수 배열로 변환하는 JavaScript
나는 대답을 원한다. 단지 힌트가 필요하다. 배열을 통해 반복 할 수 및 .pop() 배열의 마지막 값을 얻으려면 사용할 수 있지만 그 다음 거기에서 함수로 변환하는 방법을 몰라. 어떤 힌트?
var numToFun = [1, 2, 3];
var numToFunLength = numToFun.length;
for (var i = 0; i < numToFunLength; i++) {
(function(num){
numToFun.unshift(function() {
return num;
});
}(numToFun.pop()))
}
기본적으로 마지막 번호부터 번호가 튀어 나와 번호가 반환 된 함수가 만들어지고 배열의 첫 번째 자리에 다시 저장됩니다. 하나의 전체 사이클 후에, 그것들 모두는 기능이다. 여기
는 캐치 :이 어떻게 작동하는지,이 루프는 간단한 팝업 취소]처럼 보이지 않는 이유조회 당신까지 : (힌트 :
for (var i = 0; i < numToFunLength; i++) {
numToFun.unshift(function() { //put into first a function
return numToFun.pop() //that returns a number
});
}
그리고 난 이런 짓을하는 이유 : 성능)
var numToFunLength = numToFun.length;
편집 :이 권리를 수행하는 방법을 잘 설명하기위한의 다른 답변을 참조하십시오, 나는 또한 내 해결됩니다 다른 사람들이 지적했듯이
하지만, 그 많은 투쟁 자바 스크립트에서 까다로운 것들 중 하나 (자신을 포함됨, 분명히) javascript의 범위 지정 변수는 다른 많은 언어와 유사하지 않습니다. 범위는 함수에 의해 거의 순전히 정의되며, 예를 들어 for 루프의 {} 블록이 아니라 java/C가 정의됩니다.
그래서 아래에서 (와 다른 답변에서) 범위 지정 기능이 이러한 문제를 해결할 수 있습니다.
아래에있는 내 오래된 나쁜 대답은 당신이 할 수있는 것들
var numArray = [12, 33, 55];
var funcArray = [];
var numArrLength = numArray.length; // Don't do this in for loop to avoid the check multiple times
for(var j=0; j < numArrLength; j++) {
var scopeMe = function() {
var numToReturn = numArray[j];
console.log('now loading... ' + numToReturn);
var newFunc = function() {
return numToReturn;
};
return newFunc;
}();
funcArray.push(scopeMe);
};
console.log('now me');
console.log(funcArray);
console.log(funcArray[0]());
console.log(funcArray[1]());
console.log(funcArray[2]());
console.log(funcArray[1]()); // To ensure it's repeatable
편집
var funcArray = [];
for(...) {
var newFunc = function() {
return numArray.pop();
}
funcArray.push(newFunc);
}
여기서 핵심은 자바 스크립트 함수가 변수를 지명 될 수 있다는 것입니다 같은이며, 그와 같이 주변을 돌아 다녔다 :
아마도 이것은 작동하지 않을 것입니다.'i'는'newFunc' 클로저 밖에있을 것이고 매번 마지막 항목을 반환 할 것입니다. – Stoive
아마도 더 일반적인 numArray.pop(); 더 낫겠 니? 주문에 문제가있는 것이 아닌지 확실하지 않은 경우 :) –
나는 downnotes에 대한 자격이 있는지 잘 모르겠다. downvotes에 대한 피드백을받을 수 있습니까? –
여기에 세 가지 중요한 단계에있다 :
배열에서 숫자 값을 추출하십시오. i
의 반복자와 루프 내에서, 그것은 다음과 같습니다 i
그 값을 유지하지 않기 때문에
var num = numArray[i];
이 새 기능을 만들 때이 있다고, 중요하다 - 그것은 겁니다 for
루프가 완료되면 마지막 값으로 다시 설정됩니다.자체가 다음과 같을 수 기능은 :
function() { return num; }
중요하다 더 이상 i
에 대한 참조, 없다 - 더 잘 이해하기 위해 약 closures를 참조하십시오. 마지막 단계는 원하는 함수 배열에 새 함수를 추가하는 것입니다.
... 완료되었습니다.
이 숙제는 의도적으로 반복자 및 종료에 관한 일반적인 실수를 대상으로하는 것으로 보입니다. 교사/강사/가정 교사/무엇이든간에 최고야! – Stoive
숙제 인 경우 태그로 지정해야합니다. 그것이 맞다면 괜찮습니다. 그냥 – rlemon
이라는 태그를 붙이세요. 그 이유는 질문에 "과제물"태그가 붙어있는 경우 사이트 사용자는 완전한 해결책을 코딩하는 것이 올바른 방향으로 향하는 것처럼 바람직하지 않음을 알고 있습니다. – bernie
좋은 지적 , 나는 그것을 정말로 고려하지 않았다. 팁을 주셔서 감사합니다, 잘하면 내 대답은 멀지 않고 약간의 지식을 추가하고 있습니다! (그렇지 않다면 알려주세요.) –