developer tip

숫자 유형을 객체 키로 사용하는 방법이 있습니까?

copycodes 2020. 11. 5. 08:12
반응형

숫자 유형을 객체 키로 사용하는 방법이 있습니까?


객체의 키 이름으로 숫자 유형을 사용하면 항상 문자열로 변환되는 것 같습니다. 어쨌든 실제로 숫자로 저장할 수 있습니까? 정상적인 타입 캐스팅이 작동하지 않는 것 같습니다.

예:

var userId = 1;
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);

Dir 출력 :

{
    '1': 'a value'
}

내가 원하는 것은 다음과 같습니다.

{
    1: 'a value'
}

조언?

감사


아니요, 불가능합니다. 키는 항상 문자열로 변환됩니다. 참조 속성 접근 자 문서를

속성 이름은 문자열이어야합니다. 즉, 문자열이 아닌 개체는 개체에서 키로 사용할 수 없습니다. 숫자를 포함한 문자열이 아닌 객체는 toString 메소드를 통해 문자열로 형변환됩니다.

> var foo = {}
undefined

> foo[23213] = 'swag'
'swag'

> foo
{ '23213': 'swag' }

> typeof(Object.keys(foo)[0])
'string'

개체에서는 아니요,하지만 이 응용 프로그램에 Map이 매우 유용하다는 것을 알았습니다 . 여기에서 키 기반 이벤트 인 숫자 키에 사용했습니다.

onKeydown(e) {
  const { toggleSidebar, next, previous } = this.props;

  const keyMapping = new Map([
    [ 83, toggleSidebar ],  // user presses the s button
    [ 37, next          ],  // user presses the right arrow
    [ 39, previous      ]   // user presses the left arrow
  ]);

  if (keyMapping.has(e.which)) {
    e.preventDefault();
    keyMapping.get(e.which)();
  }
}

ECMA-262-5에서 의도적으로 설계된 것처럼 보입니다.

속성 식별자 유형은 속성 이름을 속성 설명자와 연결하는 데 사용됩니다. 속성 식별자 유형의 값은 형식 (이름, 설명자)의 쌍입니다. 여기서 이름은 문자열이고 설명자는 속성 설명자 값입니다.

그러나 ECMA-262-3에는 이에 대한 명확한 사양이 없습니다. 그럼에도 불구하고 나는 속성 이름으로 문자열이 아닌 것을 사용하지 않을 것입니다.


이런 게 필요한가요?

var userId = 1;var myObject ={};
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);

콘솔 : 개체

1 : "값"


위의 것을 숫자처럼 접근하기 위해 사용하고 싶다면 다음과 같이 할 수 있다고 생각합니다.

var myObj = {"0":"a","1":"b","CNT":2};
$.each(myObj,function(key,value){
     if(isNaN(parseInt(key))){
          return true; //continue;
     }
     //Code to perform operation
}

This works only when the key doesn't start with and numeric character otherwise it'll be converted to a number. See the following example:

parseInt("45kjghk") === 45

I used jQuery here


Updated:

var myObj = {"0":"a","1":"b","CNT":2};
$.each(myObj,function(key,value){
     if(isNaN(parseInt(key)) || (key.length !== parseInt(key).toString().length) ){
          return true; //continue;
     }
     //Code to perform operation
}

It may overcome the above problem. Please suggest better if available and problem with this answer if there are.


In JavaScript, numerical strings and numbers are interchangeable, so

myObject[1] == myObject['1']

If you really want number to be the key for an object, you might want an array (i.e. created with new Array() or []).

참고URL : https://stackoverflow.com/questions/3633362/is-there-any-way-to-use-a-numeric-type-as-an-object-key

반응형