2016-07-15 167 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使用的三元運算符(兩次)它也是如此。

+0

非常感謝。這是工作。順便說一句,你怎麼能添加這個運行代碼片斷按鈕?你能解釋一下嗎? – 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

相關問題