将参数作为数组元素传递

时间:2016-07-15 14:44:32

标签: javascript arrays function parameter-passing

我想将一个数组元素作为参数传递给我的函数。

我有一个数组,我的数组有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>

2 个答案:

答案 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]

执行此操作

&#13;
&#13;
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;
&#13;
&#13;

请注意,当值相等时你应该返回0,所以我使用了三元运算符(两次),其中也包含0。