新しいjavascript配列を作成し、整数をキーとして使用すると、その配列の整数までの各要素は未定義として作成されます。例えば:
var test = new Array();
test[2300] = 'Some string';
console.log(test);
2298個の未定義と1つの「一部の文字列」を出力します。
Javascriptで整数ではなく文字列として2300を使用するにはどうすればよいですか、または2299の空のインデックスをインスタンス化しないようにするにはどうすればよいですか?
人々が言っているように、オブジェクトを使用してください。ただし、整数キーをnot持つことができることに注意してください。 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] ;
}
これが役立つことを願っています!私はテストして動作しました。
ユースケースがコレクションにデータを保存している場合、ES6は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'
ES6では、Mapオブジェクト( documentation 、 Objectとの比較 )を使用できます。コードがローカルで解釈されることを意図している場合、または ES6互換性テーブル が目的に対して十分に緑色に見える場合は、マップの使用を検討してください。
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'
配列ではなくオブジェクトを使用してみてください。
var test = new Object(); test[2300] = 'Some string';
プロパティ名が整数の場合、連想配列プロパティの値を取得します。
プロパティ名が整数である連想配列から始めます。
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です。
配列の代わりにオブジェクトを使用します。 JavaScriptの配列は連想配列ではありません。これらは、名前が整数のように見えるプロパティに関連付けられた魔法を持つオブジェクトです。従来の配列のような構造としてそれらを使用していない場合、その魔法はあなたが望むものではありません。
var test = {};
test[2300] = 'some string';
console.log(test);
時々、キーにプレフィックスを使用します。例えば:
var pre = 'foo',
key = pre + 1234
obj = {};
obj[ key ] = val;
これで、問題なくアクセスできるようになりました。
配列ではなく、オブジェクトをキーとして整数を使用します。