Javascript: использование целочисленного ключа в ассоциативном массиве?

Когда я создаю новый массив javascript и использую целое число как ключ, каждый элемент этого массива до целого числа создается как undefined. например:

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

выведет 2298 undefined и одну строку "Some string".

Как мне получить javascript для использования 2300 в качестве строки вместо целого числа или как мне сохранить его из instangiating 2299 пустых индексов?

Ответ 1

Используйте объект, как говорят люди. Однако обратите внимание, что вы не можете иметь целые ключи. JavaScript преобразует целое число в строку. Следующие выходы 20, а не undefined:

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

Ответ 2

Вы можете просто использовать объект:

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

Ответ 3

Как говорят люди, javascript преобразует строку числа в integer, поэтому невозможно использовать непосредственно в ассоциативном массиве, но объекты будут работать для вас аналогичным образом. Думаю.

Вы можете создать свой объект:

var object = {};

и добавьте значения в виде массива:

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

это даст вам:

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

После этого вы можете получить доступ к нему как массив на других языках, получая ключ:

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

Надеюсь, это полезно! Я тестировал и работает.

Ответ 4

Если прецедент хранит данные в коллекции, то 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)

Ответ 5

Попробуйте использовать объект, а не массив:

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

Ответ 6

Используйте объект вместо массива. Массивы в JavaScript не являются ассоциативными массивами. Это объекты с магией, связанные с любыми свойствами, имена которых похожи на целые числа. Эта магия не то, что вы хотите, если вы не используете их в качестве традиционной структуры, подобной массиву.

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

Ответ 7

Получить значение для свойства ассоциативного массива, когда имя свойства является целым числом:

Начиная с ассоциативного массива, где имена свойств являются целыми числами:

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 > [].

Ответ 8

Иногда я использую префиксы для своих ключей. Например:

var pre = 'foo',
       key = pre + 1234
       obj = {};

obj[ key ] = val;

Теперь у вас нет проблем с доступом к ним.

Ответ 9

Используйте объект - с целым числом в качестве ключа, а не с массивом.