我想将一个数组元素作为参数传递给我的函数。
我有一个数组,我的数组有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>
答案 0 :(得分: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
来声明局部变量,那么它们的范围就是整个函数,因此你的代码会将它们声明两次。它会起作用但不必要。
答案 1 :(得分: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)
&#13;
请注意,当值相等时你应该返回0,所以我使用了三元运算符(两次),其中也包含0。