문제

연관 배열을 만들고 싶습니다.

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];
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top