2014-09-25 54 views
0

我有一個函數,我傳遞一些值。我創建一個數組並且想要創建兩個名稱/值對。參數valueFielddisplayField許多事情我傳遞的字符串。JavaScript中的參數和對象文字

在底部我在哪裏實例化一個comboStore,valueField和displayField被視爲PARAMATERS這是很好的。然而,當我將對象推到dataArray上時,valueField和displayField不被視爲參數,而是作爲文字值。

test:function (valueField, displayField, x, y) { 

    var dataArray = [] 

    dataArray.push(
     { 
      valueField: x, //this line does not use paramaters 
      displayField: y //this line does not use paramaters 
     } 
    ) 

    var comboStore = { 
     fields: [valueField,displayField], //this line uses paramaters 
     data: dataArray 
    } 


    return comboStore; 
}, 

如何paramaterise這樣的對象文字?

我想:

'' + valueField + '': x 

,但似乎不起作用。

回答

1

使用subscript (or "bracket")符號,而不是點符號:

var data = {}; 
data[valueField] = x; 
data[displayField] = y; 
dataArray.push(data); 

這樣的作品,但它是冗長。你可以寫一個函數來封裝對象創建邏輯:

function dataPoint(valueField, displayField, x, y) { 
    var data = {}; 
    data[valueField] = x; 
    data[displayField] = y; 

    return data; 
} 

dataArray.push(dataPoint('a', 'b', 1, 2)); 
dataArray.push(dataPoint('c', 'd', 3, 4)); 

如果您valueFielddisplayField性質是不變的,你可以用一個工廠功能的進一步枯竭代碼:

function dataPointFactory(valueField, displayField) { 

    return function(x, y) { 
    var data = {}; 
    data[valueField] = x; 
    data[displayField] = y; 
    return data; 
    }  
} 

var makeDataPoint = dataPointFactory('valueField1', 'displayField1'); 

dataPoint.push(makeDataPoint(1, 2)); 
dataPoint.push(makeDataPoint(3, 4)); 
+0

只是第1位是我需要什麼。謝謝 :) – 2014-09-25 09:17:35