【问题标题】:Pass parameter as an array element将参数作为数组元素传递
【发布时间】:2016-11-18 20:02:24
【问题描述】:

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

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

【问题讨论】:

  • a[ColumnName]代替a.ColumnName(这不起作用):这是动态的方式。
  • 非常感谢。它正在工作。

标签: javascript arrays function parameter-passing


【解决方案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。

【讨论】:

  • 非常感谢。这是工作。顺便说一句,你怎么能添加这个运行代码 sn-p 按钮?你能解释一下吗?
  • 当您提出问题或回答时,顶部会出现一系列按钮(粗体、斜体、...)。其中最右边的允许您创建一个 sn-p:它会打开一个弹出窗口,您可以在其中放置您的 JS、HTML、CSS,并且当您确认它会在您的文本中注入一些特殊的 &lt;!--- ... --&gt; 标签,这将起到作用。
【解决方案2】:

您的代码可能类似于:

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 声明局部变量,那么它们的作用域就是整个函数,所以你的代码声明了它们两次。它会起作用,但没有必要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2017-10-01
    相关资源
    最近更新 更多