Как сопоставить массив ключ / значение вместо объекта - PullRequest
0 голосов
/ 25 июня 2019

Мне нужно получить какое-то значение из некоторых форм, поэтому, когда мне нужно вызвать конкретное значение из формы, я хочу вызвать конкретный ключ в массиве.Но Array.prototype.map создает объект с индексом in (0, 1, 2), а затем сохраняет ключ / значение, поэтому я не могу получить доступ к определенному значению, не зная индекс.

Я пытался array.push ()а также функции из здесь , что кажется слишком много, потому что я знаю, что есть более простой способ.

let extraClassArray = licenseClass
    .map( ( i, e ) => {
        if ( '' != $( e ).val() && e.hasAttribute( 'required' ) ) {
            let id = $( e ).data( 'parent' );
            let obj = {};
            switch ( $( e ).val() ) {
                case 'A':
                    obj.A =
                        '1' ===
                        $( '#license-class-' + id )
                            .find( '#license-class-' + id + '-a-value:checked' )
                            .val() ?
                            '1' :
                            '0';
                    break;
                case 'A2':
                    obj.A2 =
                        '1' ===
                        $( '#license-class-' + id )
                            .find( '#license-class-' + id + '-a2-value:checked' )
                            .val() ?
                            '1' :
                            '0';
                    break;
                case 'B':
                    obj.BF17 =
                        '1' ===
                        $( '#license-class-' + id )
                            .find(
                                '#license-class-' + id + '-bf17-value:checked'
                            )
                            .val() ?
                            '1' :
                            '0';
                    break;
                default:
                    break;
            }
            return obj;
        }
    })
    .get();

console.log(extraClassArray);

Я хочу быть в состоянии вызвать для exapmple extraClassArrat['A'], чтобы получить значение 0или 1.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Ваш код создает массив массивов, которые имеют дополнительные атрибуты A, A2 и т. Д.

Прежде всего, я думаю, что вы запутались в разнице между массивами и объектами и должны прочитать об этом (возможно,вы пришли из PHP?)

Что вы должны сделать в вашем случае, это создать объект вне вашего цикла и назначить его свойства во время цикла.Поэтому вы должны использовать foreach (), а не map.

Что-то вроде этого:

const extraClassArray = {};
licenseClass
.forEach( ( i, e ) => {
    if ( '' != $( e ).val() && e.hasAttribute( 'required' ) ) {
        let id = $( e ).data( 'parent' );
        switch ( $( e ).val() ) {
            case 'A':
                extraClassArray.A =
                    '1' ===
                    $( '#license-class-' + id )
                        .find( '#license-class-' + id + '-a-value:checked' )
                        .val() ?
                        '1' :
                        '0';
                break;
            case 'A2':
                extraClassArray.A2 =
                    '1' ===
                    $( '#license-class-' + id )
                        .find( '#license-class-' + id + '-a2-value:checked' )
                        .val() ?
                        '1' :
                        '0';
                break;
            case 'B':
                extraClassArray.BF17 =
                    '1' ===
                    $( '#license-class-' + id )
                        .find(
                            '#license-class-' + id + '-bf17-value:checked'
                        )
                        .val() ?
                        '1' :
                        '0';
                break;
            default:
                break;
        }
    }
})
0 голосов
/ 25 июня 2019

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

var obj = {
    key1: value1,
    key2: value2
};

Добавление таких свойств:

obj["key3"] = "value3";

И получить ваши значения таким образом:

var getProperty = function (propertyName) {
    return obj[propertyName];
};

getProperty("key1");
getProperty("key2");
getProperty("key3");
...