[英]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.