2014-09-25 4 views
0

저는 일부 값을 전달하는 함수가 있습니다. 배열을 만들고 이름/값 쌍을 두 개 만들고 싶습니다. 매개 변수 valueFielddisplayField 내가 전달하고 문자열입니다. 나는 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; 
}, 

어떻게 이런 개체 리터럴을 매개 변수화합니까?

'' + 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

단지 첫 번째 비트가 있었다 내가 필요한 것. 감사 :) –

관련 문제