1

おはようございます

Javaスクリプトの関数パラメーターとして文字列を渡したいのですが、文字列は、関数が操作するプロパティの名前を表します。私はこれが以前に行われたのを見たことがありますが、それを完全には理解していません。

以下の関数は、「field」パラメーターで参照しているものを示しています。文字列として値が渡されますが、名前が文字列の値と一致するプロパティを操作します。

私がやりたいのは、オブジェクトの配列を循環し、渡された文字列と名前が一致するプロパティに格納されている値のみを返すことです。アイデアは、配列に追加されたプロパティを持つオブジェクトを処理し、プロパティごとにループ関数を記述しなくてもプロパティを返すことができる1つの関数を持つことです。

以下は、このタイプの魔法の例です。

listName.sort(sort_by('stringPropertyName', false, function(a){return a.toUpperCase()}));

var sort_by = function(field, reverse, primer){ //http://stackoverflow.com/questions/979256/how-to-sort-an-array-of-javascript-objects
   var key = function(x){return primer ? primer(x[field]) : x[field]};
   return function (a,b){
       var A = key(a), B = key(b);
       return ((A < B) ? -1 :(A > B) ? +1 : 0) * [-1,1][+!!reverse];                  
   }
}
4

1 に答える 1

5

「オブジェクトの配列を循環し、渡された文字列と名前が一致するプロパティに格納されている値のみを返す」場合は、次のようにします。

function getValues(array, propname) {
     var values = [];
     for (var i=0; i<array.length; i++) {
         if (typeof array[i][propname] !== 'undefined') {
             values.push(array[i][propname])
         }
     }
     return values;
}

「トリック」は、プロパティの名前を含む変数であるwhenobj[propname]の代わりにを使用してプロパティにアクセスすることです。obj.propnamepropname

たとえば、次のwindow.locationようにアクセスできますwindow["location"]

デモンストレーション

于 2012-10-03T15:20:37.683 に答える