スコット・ベーカー:
私がしようとしている.sort()
オブジェクトの配列が、私のJavaScriptの知識が見つけるために矢印機能を受け入れるようにコンパレータ機能を書き換えるための強力な十分ではありませんkey
、文字列オブジェクトに対してではなく、使用。これをリファクタリング任意の助けいただければ幸いです。
私の比較関数:
compareValues = (key, order = "ascending") => {
let result = 0;
return function(lhs, rhs) {
if (!(lhs.hasOwnProperty(key) && rhs.hasOwnProperty(key))) {
return result; // property is missing; comparison is impossible
}
const l = lhs[key].toLowerCase() || lhs[key];
const r = rhs[key].toLowerCase() || rhs[key];
result = (l > r) ? 1 : (l < r) ? -1 : 0;
return result * (order === "ascending") ? 1 : -1;
};
};
従来の方法で使用されています。
objects.sort(compareValues("name")); // or
objects.sort(compareValues("name", descending));
目標はthuslyそれを使用できるようにすることです。
objects.sort(compareValues(o => o.name));
...しかし、率直に言って、私は最近まで、多くのJSを使用していないので、私はそれを吸います。
アーサーGrigoryan:
私はあなたが確かに知っているので、彼らは、特定の性質を持っているかどうかを確認するために、オブジェクト上でチェックを実行する必要はないと思います。だから、これは私がそれを見る方法です。
const comparer= (select, descend = false) => (a, b) => {
let lhs = select(a); let rhs = select(b);
if (lhs < rhs) return descend ? 1 : -1;
if (lhs > rhs) return descend ? -1 : 1;
return 0;
}
let arr = [{ id: 1, name: "Clara" }, { id: 2, name: "Abraham" }, { id: 3, name: "Brian" }]
arr.sort(comparer(o => o.name))
console.log(arr);
arr.sort(comparer(o => o.name, true))
console.log(arr);