2016-07-15 8 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に三項演算子(2回)を使用しているときに0を返す必要があります注意それだけでなく。

+0

ありがとうございました。それは働いている。 Btw、この実行コードスニペットボタンをどうやって追加できますか?あなたはそれを説明できますか? – 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を使用する場合は、その範囲は、関数全体であるため、コードでは2回宣言しています。それは動作しますが、不要です。

+0

ありがとうございます。それは働いている。 – Grcn

関連する問題