[]
adalah sebuah array.
Array ini tidak digunakan sama sekali.
Itu sedang diletakkan di halaman, karena menggunakan array memberi Anda akses ke prototipe array, seperti .forEach
.
Ini lebih cepat daripada mengetik Array.prototype.forEach.call(...);
Berikutnya, forEach
adalah fungsi yang mengambil fungsi sebagai input ...
[1,2,3].forEach(function (num) { console.log(num); });
... dan untuk setiap elemen di this
( di mana this
seperti array, karena memiliki length
dan Anda dapat mengakses bagian-bagiannya seperti this[1]
) itu akan melewati tiga hal:
- elemen dalam array
- indeks elemen (elemen ketiga akan berlalu
2
)
- referensi ke array
Terakhir, .call
adalah prototipe yang memiliki fungsi (ini adalah fungsi yang dipanggil pada fungsi lain).
.call
akan mengambil argumen pertamanya dan mengganti this
bagian dalam fungsi biasa dengan apa pun yang Anda lewati call
, sebagai argumen pertama ( undefined
atau null
akan digunakan window
dalam JS sehari-hari, atau akan menjadi apa pun yang Anda berikan, jika dalam "mode ketat"). Sisa argumen akan diteruskan ke fungsi asli.
[1, 2, 3].forEach.call(["a", "b", "c"], function (item, i, arr) {
console.log(i + ": " + item);
});
// 0: "a"
// 1: "b"
// 2: "c"
Oleh karena itu, Anda membuat cara cepat untuk memanggil forEach
fungsi, dan Anda mengubah this
dari array kosong ke daftar semua <a>
tag, dan untuk setiap <a>
pesanan, Anda memanggil fungsi yang disediakan.
EDIT
Kesimpulan logis / Pembersihan
Di bawah ini, ada tautan ke artikel yang menyarankan agar kami membatalkan upaya pemrograman fungsional, dan tetap berpegang pada pengulangan inline manual, setiap saat, karena solusi ini bersifat hack-ish dan tidak sedap dipandang.
Saya akan mengatakan bahwa sementara .forEach
kurang bermanfaat daripada rekan-rekan, .map(transformer)
, .filter(predicate)
, .reduce(combiner, initialValue)
, masih melayani tujuan ketika semua Anda benar-benar ingin lakukan adalah memodifikasi dunia luar (bukan array), n-kali, sementara memiliki akses ke baik arr[i]
atau i
.
Jadi bagaimana kita menghadapi perbedaan ini, karena Motto jelas adalah orang yang berbakat dan berpengetahuan luas, dan saya ingin membayangkan bahwa saya tahu apa yang saya lakukan / ke mana saya akan pergi (sekarang dan kemudian ... ... lainnya kali ini adalah pembelajaran kepala-pertama)?
Jawabannya sebenarnya cukup sederhana, dan sesuatu Paman Bob dan Sir Crockford akan menghadapinya, karena pengawasan:
bersihkan .
function toArray (arrLike) { // or asArray(), or array(), or *whatever*
return [].slice.call(arrLike);
}
var checked = toArray(checkboxes).filter(isChecked);
checked.forEach(listValues);
Sekarang, jika Anda mempertanyakan apakah Anda perlu melakukan ini, sendiri, jawabannya mungkin tidak ...
Hal yang pasti ini dilakukan oleh ... ... setiap (?) Perpustakaan dengan fitur tingkat tinggi hari ini.
Jika Anda menggunakan lodash atau garis bawah atau bahkan jQuery, mereka semua akan memiliki cara untuk mengambil set elemen, dan melakukan aksi n-kali.
Jika Anda tidak menggunakan hal seperti itu, maka tentu saja, tulis sendiri.
lib.array = (arrLike, start, end) => [].slice.call(arrLike, start, end);
lib.extend = function (subject) {
var others = lib.array(arguments, 1);
return others.reduce(appendKeys, subject);
};
Pembaruan untuk ES6 (ES2015) dan Beyond
Tidak hanya metode pembantu slice( )
/ array( )
/ etc akan membuat hidup lebih mudah bagi orang-orang yang ingin menggunakan daftar seperti mereka menggunakan array (sebagaimana mestinya), tetapi untuk orang-orang yang memiliki kemewahan beroperasi di browser ES6 + yang relatif dekat di masa depan, atau "pengalihan" di Babel hari ini, Anda memiliki fitur bahasa bawaan, yang membuat hal semacam ini tidak perlu.
function countArgs (...allArgs) {
return allArgs.length;
}
function logArgs (...allArgs) {
return allArgs.forEach(arg => console.log(arg));
}
function extend (subject, ...others) { /* return ... */ }
var nodeArray = [ ...nodeList1, ...nodeList2 ];
Super bersih, dan sangat bermanfaat.
Cari operator Istirahat dan Sebarkan ; coba mereka di situs BabelJS; jika tumpukan teknologi Anda dalam urutan, gunakan mereka dalam produksi dengan Babel dan langkah membangun.
Tidak ada alasan bagus untuk tidak dapat menggunakan transformasi dari non-array menjadi array ... ... hanya saja jangan membuat kekacauan kode Anda melakukan apa-apa selain menempelkan garis jelek yang sama, di mana-mana.