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;
}
}
};
这是红宝书中一个知识点,这段代码不是太明白
Ini ialah fungsi alat yang dibuat untuk membandingkan struktur data tertentu. Sebagai contoh, format struktur data ialah:
Pada masa ini, kaedah
sort
am perlu ditulis seperti ini, dalam bentuk:Masalah dengan kod ini:
Parameter
value
dikodkan keras dan mesti dikod semula semasa mengisih medan lain.Logik mengembalikan 1 / -1 adalah berlebihan dan membosankan.
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:
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.