2016-07-15 4 views
0

매개 변수로 배열 요소를 전달하고 싶습니다.매개 변수를 배열 요소로 전달

배열이 있고 배열에 Column1 및 Column2 요소가 있습니다. 내 코드가 column1 또는 column2에 따라 배열을 정렬합니다. 지금은 1과 2 값을 매개 변수로 전달하고 정렬 코드에 if 조건이 있습니다.

내가 좋아하는 내 코드를 변경하려면

:

function sortGrid(ColumnName) 

var val1 = a.ColumnName.toLowerCase() 

당신이 어떤 제안이 있습니까를?

코드 :

<html lang=""> 
<body> 

<script> 
var arr = [{"Column1":"A","Column2":"F"},{"Column1":"Z","Column2":"B"}]; 

    function sortGrid(col) { 
     arr.sort(function (a, b) { 
      if (col == 1) 
      { 
       var val1 = a.Column1.toLowerCase(); 
       var val2 = b.Column1.toLowerCase(); 
      }; 
      if (col == 2) 
      { 
       var val1 = a.Column2.toLowerCase(); 
       var val2 = b.Column2.toLowerCase(); 
      }; 

      if (val1 < val2) 
       return -1 
      if (val1 > val2) 
       return 1 
     }); 
    } 

    sortGrid(1) 
    console.log(arr[0].Column1) 
    console.log(arr[1].Column1) 

    console.log('-------------------') 

    sortGrid(2) 
    console.log(arr[0].Column1) 
    console.log(arr[1].Column1) 


</script> 
</body> 
</html> 
+1

'a.ColumnName' (작동하지 않는) 대신'a [ColumnName]'을해라 : 그것은 동적 인 방법이다. – trincot

+0

고맙습니다. 그것은 효과가있다. – Grcn

답변

1

당신이 할 수 a[ColumnName]로 : 값이 동일한 경우

var arr = [{"Column1":"A","Column2":"F"},{"Column1":"Z","Column2":"B"}]; 
 

 
function sortGrid(colName) { 
 
    arr.sort(function (a, b) { 
 
    var val1 = a[colName].toLowerCase(); 
 
    var val2 = b[colName].toLowerCase(); 
 
    return val1 < val2 ? -1 
 
      : val1 > val2 ? 1 
 
      : 0; 
 
    }); 
 
} 
 

 
sortGrid('Column1') 
 
console.log(arr[0].Column1) 
 
console.log(arr[1].Column1) 
 

 
console.log('-------------------') 
 

 
sortGrid('Column2') 
 
console.log(arr[0].Column1) 
 
console.log(arr[1].Column1)
는 0을 반환해야

주, 그래서 0과 (2 회) 삼항 연산자를 사용했다 그것뿐.

+0

고맙습니다. 그것은 효과가있다. Btw,이 실행 코드 스 니펫 버튼을 어떻게 추가 할 수 있습니까? 설명해 주시겠습니까? – Grcn

+0

질문이나 답변을 입력하면 상단에 일련의 버튼 (굵게, 기울임 꼴 ...)이 있습니다. 가장 오른쪽에있는 스 니펫을 만들 수 있습니다 : JS, HTML, CSS를 넣을 수있는 팝업 창이 열리 며 텍스트에 특수한 ''태그가 삽입되어 있는지 확인하면 트릭을 수행합니다. – trincot

+0

고맙습니다. – Grcn

1

귀하의 코드가 될 수있는 일 같은 :

var arr = [{"Column1":"A","Column2":"F"},{"Column1":"Z","Column2":"B"}]; 

function sortGrid(colName) { 
    arr.sort(function (a, b) { 
     var val1 = a[colName].toLowerCase(); 
     var val2 = b[colName].toLowerCase(); 
     if (val1 < val2) 
      return -1 
     if (val1 > val2) 
      return 1 
    }); 
} 

sortGrid('Column1') 
console.log(arr[0].Column1) 
console.log(arr[1].Column1) 

console.log('-------------------') 

sortGrid('Column2') 
console.log(arr[0].Column1) 
console.log(arr[1].Column1) 

그냥 한가지 더 : 로컬 변수를 선언 할 var를 사용하는 경우, 그 범위는 전체 함수이므로 코드에서 두 번 선언합니다. 그것은 효과가 있지만 불필요합니다.

+0

고맙습니다. 그것은 효과가있다. – Grcn