如何映射 key/value 数组而不是对象

How to map a key/value array instead of an object

我需要从某些表单中获取一些值,因此当我需要从表单中调用特定值时,我想调用数组中的特定键。但是 Array.prototype.map 创建一个索引为 (0, 1, 2) 的对象,然后存储 key/value,所以我无法在不知道索引的情况下访问特定值。

我尝试了 array.push() 以及 here 中的函数,这似乎太多了,因为我知道有更简单的方法。

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);

我希望能够计算例如 extraClassArrat['A'] 以获得值 0 或 1。

您可以使用一个简单的 javascript 对象:

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

像这样添加属性:

obj["key3"] = "value3";

并以这种方式获取您的价值观:

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

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

您的代码正在创建一个数组数组,这些数组具有附加属性 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;
        }
    }
})