답변:
사람들이 말하는 것처럼 물건을 사용하십시오. 그러나 정수 키는 가질 수 없습니다 . JavaScript는 정수를 문자열로 변환합니다 . 다음은 정의되지 않은 20을 출력합니다.
var test = {}
test[2300] = 20;
console.log(test["2300"]);
0.25
와 .25
같은 문자열로 해결 "0.25"
. 따라서 분수 키를 0.25
사용하는 0.25
경우 .25
,를 사용하여 숫자로 설정된 키의 속성을 검색 할 수 "0.25"
있지만 ".25"
.
객체를 사용할 수 있습니다.
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 6 은 Map
유형을 제공합니다 .
초기화하는 것이 더 무겁습니다.
다음은 예입니다.
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';
var a = []; a[Math.pow(2, 30)] = 'hello';
하면 브라우저 / 메모리 사용량이 기가 바이트 이상 증가하는 것을 볼 수 없지만 a.length
1073741824는 1073741824입니다. VM은 다른 데이터 구조를 사용하여 일부 "배열"을 명확하게 저장합니다. 충분히 희박합니다.
속성 이름이 정수인 경우 연관 배열 속성의 값을 가져옵니다.
속성 이름이 정수인 연관 배열 로 시작합니다 .
var categories = [
{"1": "Category 1"},
{"2": "Category 2"},
{"3": "Category 3"},
{"4": "Category 4"}
];
항목을 배열로 푸시합니다.
categories.push({"2300": "Category 2300"});
categories.push({"2301": "Category 2301"});
배열을 반복하고 속성 값으로 작업을 수행합니다.
for (var i = 0; i < categories.length; i++) {
for (var categoryid in categories[i]) {
var category = categories[i][categoryid];
// Log progress to the console
console.log(categoryid + ": " + category);
// ... do something
}
}
콘솔 출력은 다음과 같습니다.
1: Category 1
2: Category 2
3: Category 3
4: Category 4
2300: Category 2300
2301: Category 2301
보시다시피 연관 배열 제한을 피하고 속성 이름을 정수로 지정할 수 있습니다.
참고 :이 예제의 연관 배열은 Dictionary <string, string> [] 개체를 직렬화 한 경우에 갖게되는 JSON 콘텐츠입니다.