Ответ 1
Используйте объект, как говорят люди. Однако обратите внимание, что вы не можете иметь целые ключи. JavaScript преобразует целое число в строку. Следующие выходы 20, а не undefined:
var test = {}
test[2300] = 20;
console.log(test["2300"]);
Когда я создаю новый массив javascript и использую целое число как ключ, каждый элемент этого массива до целого числа создается как undefined. например:
var test = new Array();
test[2300] = 'Some string';
console.log(test);
выведет 2298 undefined и одну строку "Some string".
Как мне получить javascript для использования 2300 в качестве строки вместо целого числа или как мне сохранить его из instangiating 2299 пустых индексов?
Используйте объект, как говорят люди. Однако обратите внимание, что вы не можете иметь целые ключи. JavaScript преобразует целое число в строку. Следующие выходы 20, а не undefined:
var test = {}
test[2300] = 20;
console.log(test["2300"]);
Вы можете просто использовать объект:
var test = {}
test[2300] = 'Some string';
Как говорят люди, javascript преобразует строку числа в integer, поэтому невозможно использовать непосредственно в ассоциативном массиве, но объекты будут работать для вас аналогичным образом. Думаю.
Вы можете создать свой объект:
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 = new Object(); test[2300] = 'Some string';
Используйте объект вместо массива. Массивы в JavaScript не являются ассоциативными массивами. Это объекты с магией, связанные с любыми свойствами, имена которых похожи на целые числа. Эта магия не то, что вы хотите, если вы не используете их в качестве традиционной структуры, подобной массиву.
var test = {};
test[2300] = 'some string';
console.log(test);
Получить значение для свойства ассоциативного массива, когда имя свойства является целым числом:
Начиная с ассоциативного массива, где имена свойств являются целыми числами:
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
Как вы можете видеть, вы можете обойти ограничение ассоциативного массива и иметь имя свойства как целое.
ПРИМЕЧАНИЕ. Ассоциативный массив в моем примере - это json, который у вас был бы, если бы вы сериализовали объект Dictionary < string, string > [].
Иногда я использую префиксы для своих ключей. Например:
var pre = 'foo',
key = pre + 1234
obj = {};
obj[ key ] = val;
Теперь у вас нет проблем с доступом к ним.
Используйте объект - с целым числом в качестве ключа, а не с массивом.