토스트 링이없는 연관 배열 등
-
21-08-2019 - |
문제
연관 배열을 만들고 싶습니다.
var aa = {} //equivalent to Object(), new Object(), etc...
그리고 내가 액세스 할 수있는 키가 숫자가 될 것인지 확인하고 싶습니다.
aa['hey'] = 4.3;
aa['btar'] = 43.1;
JS에 입력이 없다는 것을 알고 있으므로 자동으로 확인할 수는 없지만이 AA에 문자열 만 할당하는 것을 내 코드로 확인할 수 있습니다.
이제 사용자에게서 열쇠를 가져 왔습니다. 그 키의 값을 표시하고 싶습니다. 그러나 사용자가 "Tostring"과 같은 것을 제공하면 int가 아닌 함수를 되 찾을 것입니다! 그가 나에게주는 끈이 내가 정의하는 것인지 확인하는 방법이 있습니까? 유일한 솔루션은 다음과 같은 것입니다.
delete aa['toString'];
delete aa['hasOwnProperty'];
등...
해결책
이것이 당신을 위해 일할 것인가?
function getValue(id){
return (!isNaN(aa[id])) ? aa[id] : undefined;
}
업데이트:
도움으로 이끼 콜럼 그리고 화분에 이 일반적인 솔루션을 권장합니다.
function getValue(hash,key) {
return Object.prototype.hasOwnProperty.call(hash,key) ? hash[key] : undefined;
}
Update2 :".call"을 잊어 버렸습니다. (그것을 지적 해 주셔서 감사합니다)
업데이트 : (키에 대해)
참고 : 키는 실제로 속성의 이름이기 때문에 키는 내부적으로 문자열로 변환됩니다.
var test = {
2:"Defined as numeric",
"2":"Defined as string"
}
alert(test[2]); //Alerts "Defined as string"
개체를 사용하려는 경우 :
var test={}, test2={};
test[test2]="message"; //Using an object as a key.
alert(test[test2]); //Alerts "message". Looks like it works...
alert(test[ test2.toString() ]);
//If it really was an object this would not have worked,
// but it also alerts "message".
이제 당신은 그것이 항상 끈이라는 것을 알았으므로 사용하겠습니다.
var test={};
var test2={
toString:function(){return "some_unique_value";}
//Note that the attribute name (toString) don't need quotes.
}
test[test2]="message";
alert(test[ "some_unique_value"] ); //Alerts "message".
다른 팁
한 가지 가능성은 hasownproperty를 사용하여 키가 배열에 명시 적으로 추가 된 것인지 확인하는 것입니다. 그래서 대신 :
function findNumber(userEnteredKey) {
return aa[userEnteredKey];
}
당신은 말할 것입니다 :
function findNumber(userEnteredKey) {
if (Object.prototype.hasOwnProperty.call(aa,userEnteredKey))
return aa[userEnteredKey];
}
또는 Typeof를 사용하여 반환하기 전에 숫자인지 확인할 수 있습니다. 그러나 나는 hasownproperty 접근법을 좋아합니다. 왜냐하면 그것은 당신이 의도적으로 배열에 넣지 않은 것을 반환하지 못하게되기 때문입니다.
정말 간단한 답변 : 새로운 키를 만들 때 자신의 문자열 상수로 Prepend Prepend.
var a = {};
var k = 'MYAPP.COLLECTIONFOO.KEY.';
function setkey(userstring)
{
a[k+userstring] = 42;
}
function getkey(userstring)
{
return a[k+userstring];
}