簡體   English   中英

如何映射鍵/值數組而不是對象

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

我需要從某些表單中獲取一些值,所以當我需要從表單中調用特定值時,我想調用數組中的特定鍵。 但是Array.prototype.map在索引(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);

我希望能夠通過exacmple 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;
        }
    }
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM