[javascript] JavaScript의 연관 배열에서 정수를 키로 사용

새 JavaScript 배열을 만들고 정수를 키로 사용하면 해당 배열의 각 요소가 정의되지 않은 것으로 생성됩니다.

예를 들면 :

var test = new Array();
test[2300] = 'Some string';
console.log(test);

정의되지 않은 2298 개와 ‘일부 문자열’하나를 출력합니다.

정수 대신 문자열로 2300을 사용하도록 JavaScript를 가져 오거나 2299 빈 인덱스를 인스턴스화하지 않도록하려면 어떻게해야합니까?



답변

사람들이 말하는 것처럼 물건을 사용하십시오. 그러나 정수 키는 가질 수 없습니다 . JavaScript는 정수를 문자열로 변환합니다 . 다음은 정의되지 않은 20을 출력합니다.

var test = {}
test[2300] = 20;
console.log(test["2300"]);


답변

객체를 사용할 수 있습니다.

var test = {}
test[2300] = 'Some string';


답변

사람들이 말했듯이 JavaScript는 숫자 문자열을 정수로 변환하므로 연관 배열에서 직접 사용할 수는 없지만 객체는 제 생각과 비슷한 방식으로 작동합니다.

다음과 같이 개체를 만들 수 있습니다.

var object = {};

그리고 배열이 작동 할 때 값을 추가합니다.

object[1] = value;
object[2] = value;

이것은 당신에게 줄 것입니다 :

{
  '1': value,
  '2': value
}

그 후에 다른 언어의 배열처럼 키를 가져 오는 것처럼 액세스 할 수 있습니다.

for(key in object)
{
   value = object[key] ;
}

나는 테스트하고 작동합니다.


답변

사용 사례가 컬렉션에 데이터를 저장하는 경우 ECMAScript 6Map유형을 제공합니다 .

초기화하는 것이 더 무겁습니다.

다음은 예입니다.

const map = new Map();
map.set(1, "One");
map.set(2, "Two");
map.set(3, "Three");

console.log("=== With Map ===");

for (const [key, value] of map) {
    console.log(`${key}: ${value} (${typeof(key)})`);
}

console.log("=== With Object ===");

const fakeMap = {
    1: "One",
    2: "Two",
    3: "Three"
};

for (const key in fakeMap) {
    console.log(`${key}: ${fakeMap[key]} (${typeof(key)})`);
}

결과:

=== With Map ===
1: One (number)
2: Two (number)
3: Three (number)
=== With Object ===
1: One (string)
2: Two (string)
3: Three (string)


답변

다른 답변 컴파일 :

목적

var test = {};

숫자를 새 속성의 키로 사용하면 숫자가 문자열로 바뀝니다.

test[2300] = 'Some string';
console.log(test['2300']);
// Output: 'Some string'

동일한 숫자를 사용하여 속성 값에 액세스하면 숫자가 다시 문자열로 바뀝니다.

console.log(test[2300]);
// Output: 'Some string'

그러나 객체에서 키를 가져올 때 숫자로 다시 변환되지는 않습니다.

for (var key in test) {
    console.log(typeof key);
}
// Output: 'string'

지도

ECMAScript 6에서는 Map 객체 ( documentation , Object와의 비교 )를 사용할 수 있습니다. 코드가 로컬에서 해석되거나 ECMAScript 6 호환성 테이블 이 목적에 맞게 충분히 녹색으로 보이는 경우 맵 사용을 고려하십시오.

var test = new Map();
test.set(2300, 'Some string');
console.log(test.get(2300));
// Output: 'Some string'

좋든 나쁘 든 유형 변환이 수행되지 않습니다.

console.log(test.get('2300'));
// Output: undefined
test.set('2300', 'Very different string');
console.log(test.get(2300));
// Output: 'Some string'


답변

배열 대신 개체를 사용하십시오. JavaScript의 배열은 연관 배열이 아닙니다. 이름이 정수처럼 보이는 속성과 관련된 마법이있는 개체입니다. 그 마법은 전통적인 배열과 같은 구조로 사용하지 않는 경우 원하는 것이 아닙니다.

var test = {};
test[2300] = 'some string';
console.log(test);


답변

배열이 아닌 객체를 사용해보십시오.

var test = new Object(); test[2300] = 'Some string';