如何映射键/值数组而不是对象

时间:2019-06-25 07:45:16

标签: javascript jquery arrays object array.prototype.map

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

我尝试了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。

2 个答案:

答案 0 :(得分:0)

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

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

添加这样的属性:

obj["key3"] = "value3";

并以此方式获得您的价值观:

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

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

答案 1 :(得分:0)

您的代码正在创建具有附加属性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;
        }
    }
})
相关问题