Respons saya sebagian besar didasarkan pada respons berperingkat tertinggi di sini dan mudah-mudahan semua orang mengerti (juga memiliki penjelasan yang sama pada GitHub saya). Inilah mengapa penerapannya pada peta bekerja:
Object.keys(images).map((key) => images[key] = 'url(' + '"' + images[key] + '"' +
')');
Tujuan dari fungsi ini adalah untuk mengambil objek dan memodifikasi konten asli objek menggunakan metode yang tersedia untuk semua objek (objek dan array sama) tanpa mengembalikan array. Hampir semua yang ada di dalam JS adalah objek, dan untuk alasan itu, elemen-elemen yang lebih jauh di dalam pipa pewarisan berpotensi dapat secara teknis menggunakan yang tersedia untuk yang berada di garis atas (dan sebaliknya muncul).
Alasan bahwa ini berfungsi adalah karena fungsi .map mengembalikan array yang MEMBUTUHKAN bahwa Anda memberikan PENGEMBALIAN array secara eksplisit atau implisit alih-alih hanya memodifikasi objek yang ada. Anda pada dasarnya mengelabui program untuk berpikir objek adalah array dengan menggunakan Object.keys yang akan memungkinkan Anda untuk menggunakan fungsi peta dengan aktingnya pada nilai-nilai yang terkait dengan kunci individu (saya sebenarnya secara tidak sengaja mengembalikan array tetapi memperbaikinya). Selama tidak ada pengembalian dalam arti normal, tidak akan ada array yang dibuat dengan objek asli masih utuh dan dimodifikasi seperti yang diprogram.
Program khusus ini mengambil objek yang disebut gambar dan mengambil nilai kunci dan menambahkan tag url untuk digunakan dalam fungsi lain. Asli adalah ini:
var images = {
snow: 'https://www.trbimg.com/img-5aa059f5/turbine/bs-md-weather-20180305',
sunny: 'http://www.cubaweather.org/images/weather-photos/large/Sunny-morning-east-
Matanzas-city- Cuba-20170131-1080.jpg',
rain: 'https://i.pinimg.com/originals/23/d8
/ab/23d8ab1eebc72a123cebc80ce32b43d8.jpg' };
... dan dimodifikasi adalah ini:
var images = {
snow: url('https://www.trbimg.com/img-5aa059f5/turbine/bs-md-weather-20180305'),
sunny: url('http://www.cubaweather.org/images/weather-photos/large/Sunny-morning-
east-Matanzas-city- Cuba-20170131-1080.jpg'),
rain: url('https://i.pinimg.com/originals/23/d8
/ab/23d8ab1eebc72a123cebc80ce32b43d8.jpg')
};
Struktur asli objek dibiarkan utuh memungkinkan untuk akses properti normal selama tidak ada pengembalian. JANGAN memilikinya mengembalikan array seperti biasa dan semuanya akan baik-baik saja. Tujuannya adalah MENGUBAH nilai-nilai asli (gambar [kunci]) untuk apa yang diinginkan dan bukan yang lain. Sejauh yang saya tahu, untuk mencegah output array TELAH ada REASSIGNMENT gambar [kunci] dan tidak ada permintaan implisit atau eksplisit untuk mengembalikan array (tugas variabel melakukan ini dan glitching bolak-balik untuk saya).
EDIT:
Pergi ke alamat metode lain mengenai penciptaan objek baru untuk menghindari memodifikasi objek asli (dan penugasan ulang tampaknya masih diperlukan untuk menghindari sengaja membuat array sebagai output). Fungsi-fungsi ini menggunakan sintaks panah dan jika Anda hanya ingin membuat objek baru untuk digunakan di masa depan.
const mapper = (obj, mapFn) => Object.keys(obj).reduce((result, key) => {
result[key] = mapFn(obj)[key];
return result;
}, {});
var newImages = mapper(images, (value) => value);
Cara kerja fungsi-fungsi ini adalah seperti ini:
mapFn mengambil fungsi untuk ditambahkan nanti (dalam hal ini (nilai) => nilai) dan hanya mengembalikan apa pun yang disimpan di sana sebagai nilai untuk kunci itu (atau dikalikan dua jika Anda mengubah nilai kembali seperti yang dilakukannya) di mapFn ( obj) [key],
dan kemudian mendefinisikan kembali nilai asli yang terkait dengan kunci dalam hasil [key] = mapFn (obj) [key]
dan mengembalikan operasi yang dilakukan pada hasil (akumulator yang terletak di kurung dimulai pada akhir fungsi .reduce).
Semua ini dilakukan pada objek yang dipilih dan MASIH di sana TIDAK BISA menjadi permintaan implisit untuk array yang dikembalikan dan hanya berfungsi ketika menetapkan ulang nilai sejauh yang saya tahu. Ini membutuhkan beberapa senam mental tetapi mengurangi garis kode yang diperlukan seperti yang dapat dilihat di atas. Output persis sama seperti yang bisa dilihat di bawah ini:
{snow: "https://www.trbimg.com/img-5aa059f5/turbine/bs-
md-weather-20180305", sunny: "http://www.cubaweather.org/images/weather-
photos/l…morning-east-Matanzas-city-Cuba-20170131-1080.jpg", rain:
"https://i.pinimg.com/originals/23/d8
/ab/23d8ab1eebc72a123cebc80ce32b43d8.jpg"}
Ingat ini bekerja dengan NON-NUMBERS. Anda BISA menduplikasi objek APAPUN dengan SIMPLY MENGEMBALIKAN NILAI di fungsi mapFN.
Object.keys
, yang tidak memiliki urutan yang jelas. Itu bisa bermasalah, saya sarankan menggunakanObject.getOwnPropertyNames
sebagai gantinya.