javascript - Soalan tentang fungsi perbandingan
为情所困
为情所困 2017-07-05 11:06:44
0
4
884
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;
        }
    }
};

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

membalas semua(4)
过去多啦不再A梦

Ini ialah fungsi alat yang dibuat untuk membandingkan struktur data tertentu. Sebagai contoh, format struktur data ialah:

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

Pada masa ini, kaedah sort am perlu ditulis seperti ini, dalam bentuk:

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

Masalah dengan kod ini:

  1. Parameter value dikodkan keras dan mesti dikod semula semasa mengisih medan lain.

  2. Logik mengembalikan 1 / -1 adalah berlebihan dan membosankan.

  3. Secara langsung menulis fungsi tanpa nama untuk pengisihan tidak cukup dibaca pada era Buku Merah Kecil (sekarang terdapat fungsi anak panah, ia sebenarnya bukan masalah besar).

Jadi untuk kes di atas, pengarang Buku Merah mereka bentuk fungsi alat umum untuk menjana fungsi [untuk mengisih medan tertentu]. Ambil perhatian bahawa apabila anda memanggil fungsi utiliti ini, apa yang dikembalikan ialah fungsi baharu, bukan hasil yang diisih (yang dipanggil fungsi tertib lebih tinggi).

Selepas menggunakan pakej ini, kodnya kelihatan seperti:

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

Ini memainkan peranan dalam memudahkan logik perniagaan.

淡淡烟草味

Apa yang saya tidak faham ialah membandingkan saiz atribut tertentu bagi dua objek
createComparisonFunction("test")({'test': 1}, {"test": 2})
mengembalikan -1

巴扎黑

Apabila memanggil fungsi, lihat dalam dua langkah. Mula-mula, kembalikan hasil perbandingan melalui atribut createComparisonFunction()传入比较的字段。在createComparisonFunction()函数内,返回一个匿名函数。同时由于匿名函数处在createComparisonFunction()内,所以你对createComparisonFunction()传入的参数propertyName对匿名函数也有效存在。
通过上一步,你已经得到的匿名函数包含propertyName,此时你就可以传入你要比较的两个对象,在函数内比较他们的propertyName.

我想大声告诉你

Ini dipanggil fungsi peringkat tinggi.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan