どのように私は、パラメータとしてJavaScriptのES6矢印関数を渡すことができます

スコット・ベーカー:

私がしようとしている.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);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=32719&siteId=1