자바 스크립트에서 객체 매개 변수를 사용하는 것이 필자가 선호하는 함수 사용 방법입니다. 함수에 필요한 매개 변수가 있는지 확인하려면 모든 객체 매개 변수 속성을 반복하고 필요한 속성이 필요할 때까지 기다리거나 (Solution 2
) 오류를 던집니다. 솔루션 2는 효율적으로 보이지만 함수의 여러 위치에 던져 야합니다. Solution 1
은 실용적으로 보이지만 재사용 가능한 코드 조각이어야합니다. 내가보고 있어야하는 또 다른 해결책이 있습니까?개체 매개 변수가 모두 require 속성을 가지고 있는지 확인하는 가장 효율적인 방법은 무엇입니까?
답변
당신은 실제로 당신은
function hasProperty(propName, obj){
return obj.hasOwnProperty(propName);
}
처럼 하나의 속성을 확인할 수 있습니다
var propsNeeded = ["prop1", "prop2", "blah", "blah", "blah"],
obj = {
prop1: "Hi"
}
function hasRequiredProperties(props, obj){
return Object.keys(obj).sort().join() == propsNeeded.sort().join();
}
console.log(hasRequiredProperties(propsNeeded, obj)); // false
이 일관성을 위해 내가 require
방법을 작성하고 일부 속성이 필요할 때 항상을 사용 할 수 있습니다.
var require = function (key, object) {
if (typeof object[key] === 'undefined') {
throw new Error('Required property ' + key + ' is undefined');
}
};
필요한 속성이 필요한지 확인한 후 속성이 필요한지 테스트합니다. 이처럼 : 아 미트의 대답 @ 사용
var example = function (args) {
require('alwaysRequired', args);
// some code here which uses property alwaysRequired
if (args.something) {
require('sometimesRequired', args);
// some code here which uses property sometimesRequired
}
};
아마 Object
자체를하는 방법을 추가 할 것 :
function someFunction(myObject){
var objComplete = myObject.hasAllProperties(["prop1", "prop2", "prop3"], false);
}
업데이트 :
Object.prototype.hasAllProperties = function(props, fire){
var result = Object.keys(this).sort().join() == propsNeeded.sort().join();
if (fire && !result){
throw new Error('Object does not define all properties');
}
return result;
}
및 함수에
@ Amit의 원본과
Object.prototype.hasAllProperties = function(props, fire){
var result = true;
$(props).each(function(i, e){
if (!this.hasOwnProperty(e)) {
result = false;
return false;
}
});
if (fire && !result){
throw new Error('Object does not define all properties');
}
return result;
}
왜 당신이 그것을 원한다, 특히 프로토 타입에 대한 열거 속성으로, 또한 때 "알고리즘"결함이 있습니다 @ AmitJoki의 답변에 대한 의견을 참조하십시오)? –
@torazaburo 그래, 네 말이 맞아. 처음에는 @ AmitJoki의 대답이 효과가있는 것처럼 보였습니다. 나는 그 해답을 업데이트했다. – artm
이 거의 자연 언어처럼 읽고
requiredParams.every(function(prop) { return prop in paramObj; })
으로 충분히 쉽게 할 수있는 객체의 키의 존재 여부를 확인하는 단지 일반적인 경우는 다음과 같습니다 swer, 여기에 내가 제안 무엇 . "필요한 매개 변수를 가져 오는 중 하나가 매개 변수 개체에 있습니까?"
간편한 재사용을 위해 function checkParams(paramObj, requiredParams)
으로 마무리하십시오.
일반적으로 이것은 하나의 목록 (이 경우 필수 매개 변수 목록)이 다른 목록 (params 객체의 키)에 포함되어 있는지 묻는 문제입니다.그래서 우리는 목록에 포함시키기 위해 일반적인 루틴을 작성할 수 있습니다
는function listIncluded(list1, list2) {
return list1.every(function(e) { return list2.indexOf(e) !== -1; });
}
그리고 우리의 매개 변수 검사는
function checkParams(paramObj, requiredParams) {
return listIncluded(requiredParams, Object.keys(paramObj));
}
이된다 당신이 개체는 세 번째없이이 기능을 사용할 수 있습니다 적어도 일부 속성이 있는지 알고 싶다면 매개 변수 :
function hasRequiredProperties(propsNeeded, obj, strict) {
if (strict) return Object.keys(obj).sort().join() == propsNeeded.sort().join();
for (var i in propsNeeded) {
if (!obj.hasOwnProperty(propsNeeded[i])) return false;
}
return true;
};
예 :
options = {url: {
protocol: 'https:',
hostname: 'encrypted.google.com',
port: '80'
}
};
propsNeeded = ['protocol', 'hostname'];
hasRequiredProperties(propsNeeded, options.url); // true
hasRequiredProperties(propsNeeded, options.url, true); // false
- 1. 점이 여러 개의 상자에 있는지 확인하는 가장 효율적인 방법은 무엇입니까
- 2. 배열에 Java 값이 있는지 확인하는 가장 효율적인 방법은 무엇입니까?
- 3. HTML 요소가 뷰포트에 있는지 확인하는 가장 효율적인 방법은 무엇입니까?
- 4. 물품이 Arraylist에 있는지 확인하는 가장 효율적인 방법은 무엇입니까?
- 5. 개체 모음을 만드는 가장 효율적인 방법은 무엇입니까?
- 6. 뺄셈 전에 변수가 있는지 확인하는 가장 좋은 방법은 무엇입니까?
- 7. 배치 전달 매개 변수가 있는지 확인하는 방법은 무엇입니까?
- 8. SQL 쿼리에 매개 변수가 있는지 확인하는 가장 좋은 방법
- 9. 파일에 충분한 변수가 있는지 확인하는 방법은 무엇입니까?
- 10. 변수가 정의되어 있는지 확인하는 방법은 무엇입니까?
- 11. 속도 : 변수가 정의되어 있는지 확인하는 방법은 무엇입니까
- 12. wp7에서 변수가 비어 있는지 확인하는 방법은 무엇입니까?
- 13. 치킨 스킴에 변수가 있는지 확인하는 방법은 무엇입니까?
- 14. EditText가 모두 비어 있는지 확인하는 방법은 무엇입니까?
- 15. ExecuteScalar 결과를 확인하는 가장 효율적인 방법은 무엇입니까?
- 16. 사용자가 로그인했는지 확인하는 가장 효율적인 방법은 무엇입니까?
- 17. 최대 레벨을 확인하는 가장 효율적인 방법은 무엇입니까?
- 18. vb. 객체가 특정 속성을 가지고 있는지 확인하는 방법
- 19. 플라스크에 get 매개 변수가 있는지 확인하는 방법
- 20. 요청 URI에 매개 변수가 있는지 확인하는 방법
- 21. 변수가 nil인지 확인하는 가장 좋은 방법은 무엇입니까?
- 22. Azure Storage Queue에 메시지가 있는지 확인하는 가장 효율적인 방법
- 23. 자바 : 문자열이 단어 목록에 있는지 확인하는 가장 효율적인 방법
- 24. @selector에 매개 변수가 필요한지 확인하는 방법은 무엇입니까?
- 25. 함수 매개 변수가 상수인지 확인하는 방법은 무엇입니까?
- 26. JavaScript에서 매개 변수가 Array 또는 Object인지 확인하는 방법은 무엇입니까?
- 27. 쿠키가 있는지 확인하는 가장 좋은 방법은 무엇입니까?
- 28. 변수가 어느 배열에 속하는지 확인하는 가장 효율적인 방법
- 29. 노드가 Dojo에 특정 클래스를 가지고 있는지 확인하는 방법은 무엇입니까?
- 30. 개체 속성을 기반으로 목록에서 개체를 정렬/분류하는 가장 효율적인 방법
이 솔루션은 @Matti 솔루션이 여러 호출을 호출하는 동안 동시에 여러 속성을 확인하는 문제를 해결합니다. – ezraspectre
OP는 "필수 매개 변수"라는 용어를 사용합니다. 이는 "필수가 아닌 (선택적)"매개 변수가있을 수도 있음을 나타냅니다 . 이 루틴은 선택적 매개 변수의 가능성을 제거합니다. 전달 된 매개 변수가 필요한 매개 변수와 정확히 일치하는지 검사합니다. 그건 제외하고, 본질적으로 문자열 표현을 비교하여 두 배열을 비교하는 접근법은 다소 이상하게 보입니다. 그렇죠? 이 버그는 실생활에서 거의 발생하지 않지만 "a"와 "b"가 필수 매개 변수 인 경우이 루틴은 전달 된 객체가'{ "a, b": true}'이면 성공을보고합니다. –
@torazaburo 잘, 나는 단일 사용 버전을 포함했습니다 :) 감사합니다 btw –