javascript - Questions sur les fonctions de comparaison
为情所困
为情所困 2017-07-05 11:06:44
0
4
886
function createComparisonFunction(propertyName) {
    return function(object1,object2) {
        var value1 = object1[propertyName];
        var value2 = object2[propertyName];
    
        if(value1 < value2) {
            return -1;
        } else if(value1 > value2) {
            return 1;
        } else {
            return 0;
        }
    }
};

这是红宝书中一个知识点,这段代码不是太明白
为情所困
为情所困

répondre à tous(4)
过去多啦不再A梦

Il s'agit d'une fonction d'outil conçue pour comparer des structures de données spécifiques. Par exemple, le format de la structure des données est :

let arr = [{ name: 'foo', value: 123 }, { name: 'bar', value: 456 }]

À ce stade, la méthode générale sort doit être écrite ainsi, sous la forme :

arr.sort(function (a, b) { return a.value - b.value > 0 ? 1 : -1 })

Problèmes avec ce code :

  1. Le paramètre value est codé en dur et doit être recodé lors du tri des autres champs.

  2. La logique du retour 1/-1 est redondante et ennuyeuse.

  3. Écrire directement des fonctions anonymes pour trier n'était pas assez lisible à l'époque du Petit Livre Rouge (maintenant qu'il existe des fonctions fléchées, ce n'est effectivement plus un gros problème).

Donc, pour le cas ci-dessus, l'auteur de Red Book a conçu une fonction d'outil générale pour générer une fonction [pour trier des champs spécifiques]. Notez que lorsque vous appelez cette fonction utilitaire, ce qui est renvoyé est une nouvelle fonction, et non le résultat trié (ce qu'on appelle la fonction d'ordre supérieur).

Après avoir appliqué ce package, le code ressemble à :

// 创造一个【根据 value 字段来排序】的函数
let compareFn = createComparisonFunction('value')
// 将创造的函数传入 sort 中作为排序依据
arr.sort(compareFn)

Cela joue un rôle dans la simplification de la logique métier.

淡淡烟草味

Ce que je ne comprends pas, c'est que comparer la taille d'un certain attribut de deux objets
createComparisonFunction("test")({'test': 1}, {"test": 2})
renvoie -1

巴扎黑

Lorsque vous appelez une fonction, examinez-la en deux étapes. Tout d’abord, renvoyez le résultat de la comparaison via l’attribut createComparisonFunction()传入比较的字段。在createComparisonFunction()函数内,返回一个匿名函数。同时由于匿名函数处在createComparisonFunction()内,所以你对createComparisonFunction()传入的参数propertyName对匿名函数也有效存在。
通过上一步,你已经得到的匿名函数包含propertyName,此时你就可以传入你要比较的两个对象,在函数内比较他们的propertyName.

我想大声告诉你

C'est ce qu'on appelle une fonction d'ordre supérieur.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal