2016-07-15 94 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