this関数をangular2/Typescriptに変換しようとしています。オブジェクトの配列を複数のフィールドで並べ替えるためです。angular2複数のフィールドでオブジェクトの配列を並べ替える関数
私はTypescriptを初めて使用しています。その点をきれいにチェックできますか?
私は
prodataTemp.sort(this.UtilsService.sort_by('brand', 'name', 'model'));
とutilsの-service.ts中を呼び出しています:
sort_by(...args: any[]) { //multiple sort https://stackoverflow.com/questions/6913512/how-to-sort-an-array-of-objects-by-multiple-fields
var fields = [],
n_fields = args.length,
field, name, reverse, cmp;
var default_cmp = function(a, b) {
if (a == b) return 0;
return a < b ? -1 : 1;
};
var getCmpFunc = function(primer, reverse) {
var dfc = default_cmp, // closer in scope
cmp = default_cmp;
if (primer) {
cmp = function(a, b) {
return dfc(primer(a), primer(b));
};
}
if (reverse) {
return function(a, b) {
return -1 * cmp(a, b);
};
}
return cmp;
};
// preprocess sorting options
for (var i = 0; i < n_fields; i++) {
field = args[i];
if (typeof field === 'string') {
name = field;
cmp = default_cmp;
}
else {
name = field.name;
cmp = getCmpFunc(field.primer, field.reverse);
}
fields.push({
name: name,
cmp: cmp
});
}
// final comparison function
return function(A, B) {
var a, b, name, result;
for (var i = 0; i < n_fields; i++) {
result = 0;
field = fields[i];
name = field.name;
result = field.cmp(A[name], B[name]);
if (result !== 0) break;
}
return result;
}
};
感謝を!
問題がありますか? –
番号。たぶん、関数を詳細にテストする必要があるかもしれませんが、今のところエラーはありません。 – Louis
ここで具体的な質問をしなければなりません。スコープの変数をリセットするのではなく、関数を入れ子にするために矢印関数を使うことをお勧めします。 –