Как l oop через перечисление значений по спецификацией c значение в Javascript - PullRequest
0 голосов
/ 31 марта 2020

Я довольно новичок в Javascript и использую перечисления в целом, и я не могу найти способ l oop через перечисление так, как мне бы хотелось.

I У меня есть следующее перечисление:

export var EnumVar = 
{
    ENTRY0:         0,
    ENTRY1:         1,
    ENTRY2:         2,
    ENTRY3:         3,
    ENTRY4:         4,
    ENTRY5:         5,
    ENTRY6:         6,
    ENTRY7:         7,
    ENTRY8:         8,
    ENTRY9:         9,

    properties:
    {
        0: {name: "Entry Number One"},
        1: {name: "Entry Number Two"},
        2: {name: "Entry Number Three"},
        3: {name: "Entry Number Four"},
        4: {name: "Entry Number Five"},
        5: {name: "Entry Number Six"},
        6: {name: "Entry Number Seven"},
        7: {name: "Entry Number Eight"},
        8: {name: "Entry Number Nine"},
        9: {name: "Entry Number Ten"}
    }
}

Я знаю, что если я использую console.log(EnumVar.ENTRY0);, то он напечатает 0. Я знаю, что могу использовать:

for (element in EnumVar.properties)
{
    console.log(element.toString());
}

, и он (по-видимому) будет случайным образом распечатывать числа.

У меня очень большой список перечислений со 100+ записями, которые я хочу l oop через. Мне не нужно l oop через каждую запись, но я могу делать это каждые 10 - 20, например. Кажется, я не могу найти способ итерации, такой как element in, где я могу сказать, что он должен повторяться на единицу, скажем, 10 или 20. Может ли кто-нибудь помочь мне найти ресурс, чтобы выяснить это?

Ответы [ 3 ]

0 голосов
/ 31 марта 2020

Вы можете создать массив ключей объекта, используя Object.keys, а затем аплитный массив для кусков, используя slice

let array = Object.keys(EnumVar.properties)
let i,j,temparray,chunk = 10;
for (i=0,j=array.length; i<j; i+=chunk) {
    temparray = array.slice(i,i+chunk);
    // do whatever
    for (element in temparray)
    {
        console.log(element.toString(), EnumVar.properties[element] );
    }
}
0 голосов
/ 31 марта 2020

Вам просто нужно получить значение enum, а затем использовать его для доступа к свойству. Проверьте ссылку для деталей https://stijndewitt.com/2014/01/26/enums-in-javascript/

0 голосов
/ 31 марта 2020

Две вещи, во-первых, «технически», вы не можете использовать числа в качестве ключей объекта (вы можете, но, как вы заметили, порядок является случайным в зависимости от реализации браузера).

Во-вторых, если вы хотите чтобы сделать каждую десятую запись, используйте Object.keys. Т.е.

var keys = Object.keys(EnumVar.properties);
for (var i = 0; i < keys.length; i += 10) {
  console.log(i.toString() + ' contains ' + JSON.stringify(EnumVar.properties[i]));
}

Примечание: Object.keys будет генерировать случайный порядок так же, как и в завещании, если у вас на самом деле число в качестве ключа, то оно лучше для массива - но нет коротких обозначений :

var tmp = {1: 'test-1', 10: 'test-10'}  

для разреженных массивов, подобных объектам, - вам придется создавать их один за другим.

var tmp = []; 
tmp[1] = 'test-1';
tmp[10] = 'test-10';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...