2010-02-01 63 views
3

我得在這樣的對象的功能:的JavaScript:重構,避免的Array.push()

arrayofElements: function(item) { 

    var result = []; 

    if (item.isA) { 
     result.push(new Div('aClass', labels['A'])); 
    } 

    if (item.isC) { 
     result.push(new Div('cClass', labels['C'])); 
    } 

    if (item.isD) { 
     result.push(new Div('dClass', labels['D'])); 
    } 

    return result; 
}, 

這又如何重構?我不喜歡必須有條件地推送()每個項目。

+0

沒有'item'還有哪些特性? – outis 2010-02-01 04:21:04

+2

你不喜歡.push()方法嗎?或包裝每個電話的條件? – scunliffe 2010-02-01 04:35:29

+0

是否可以從項目對象內訪問標籤屬性? – Max 2010-02-01 10:19:14

回答

4

你可以在子的is*特性轉移到子對象,以便將它們隔離開來,並循環-object的屬性

item.is={A:'aClass', C:'cClass'}; 
... 
arrayofElements: function(item) { 
    var result = []; 
    for (p in item.is) { 
     result.push(new Div(item.is[p], labels[p])); 
    } 
    return result; 
}, 

值在item.is可能是類(如圖所示),或在item.is值可以是具有class屬性的對象,或者你可以使用屬性名p在anoth指數呃反對得到類。這在很大程度上取決於item的表示以及元素類最相關的內容。

1
arrayofElements: function(item) { 

var result = [], 
    items = ['A', 'C', 'D']; 
while(var i=0; i < items.length; i++) { 
    if(item["is" + items[i]]) { 
    result.push(new Div(items[i] + 'Class', labels[items[i]])) 
    } 
} 
return result; 
}, 

記住obj.foo是一樣的OBJ在Javascript中[「富」]

0

拉里的解決方案的一種變體:

arrayofElements: function(item) { 
    var result = [], letters = ['A','C','D'], ltr, i, len; 
    len = letters.length; 
    for (i = 0; i < len; i++) { 
    ltr = letters[i]; 
    if (item["is"+ltr]) { 
     result.push(new Div(ltr.toLowerCase()+"Class", labels[ltr])); 
    } 
    } 
    return result; 
}, 
0

該功能避免了使用push()和功能上等同於你:

arrayofElements: function(item) { 

    if (item.isA) { 
     return [new Div('aClass', labels['A'])]; 
    } 

    if (item.isC) { 
     return [new Div('cClass', labels['C'])]; 
    } 

    if (item.isD) { 
     return [new Div('dClass', labels['D'])]; 
    } 

    return []; 
}, 
+0

不完全。在他的代碼中,如果項目看起來像「{isA:true,isC:true}」,它將返回新的Div('aClass',標籤['A']),新的Div('cClass',標籤['C' ])]'Array#push會修改它被調用的數組。 – BaroqueBobcat 2010-02-02 23:12:50

+0

啊,你說得對。我認爲一個項目只能是isA,isC或isD中的一個。 – yungsters 2010-02-03 01:56:33