Kode saya
var arr = ['a','b',1];
var results = arr.map(function(item){
if(typeof item ==='string'){return item;}
});
Ini memberikan hasil sebagai berikut
["a","b",undefined]
Saya tidak ingin undefined dalam larik hasil. Bagaimana cara melakukannya?
javascript
Akshat Jiwan Sharma
sumber
sumber
undefined
. Apa yang Anda harapkan untuk dikembalikan jika itu bukan string? String kosong?Jawaban:
Anda tidak akan mengembalikan apa pun jika item tersebut bukan string. Dalam hal ini, fungsi mengembalikan tidak terdefinisi, apa yang Anda lihat di hasil.
Fungsi peta digunakan untuk memetakan satu nilai ke nilai lainnya, tetapi tampaknya Anda sebenarnya ingin memfilter larik, yang tidak cocok untuk fungsi peta.
Yang Anda inginkan sebenarnya adalah fungsi filter . Dibutuhkan fungsi yang mengembalikan benar atau salah berdasarkan apakah Anda menginginkan item dalam larik yang dihasilkan atau tidak.
sumber
Filter berfungsi untuk kasus khusus ini di mana item tidak diubah. Tetapi dalam banyak kasus ketika Anda menggunakan peta Anda ingin membuat beberapa modifikasi pada item yang dikirimkan.
jika itu maksud Anda, Anda bisa menggunakan reduce :
sumber
map
menghasilkan array denganundefined
.filter
hanya mengembalikan barang atau tidak. ini sempurnaKarena ES6
filter
mendukung notasi panah runcing (seperti LINQ):Jadi itu bisa diringkas menjadi mengikuti satu baris.
sumber
Solusi saya adalah menggunakan filter setelah peta.
Ini harus mendukung setiap tipe data JS.
contoh:
sumber
Anda hanya mengembalikan nilai jika elemen saat ini adalah a
string
. Mungkin menugaskan string kosong jika tidak sudah cukup:Tentu saja, jika Anda ingin memfilter elemen non-string apa pun, Anda tidak boleh menggunakan
map()
. Sebaliknya, Anda harus mempertimbangkan untuk menggunakanfilter()
fungsinya.sumber
sumber
Anda dapat mengimplementasikan seperti logika di bawah ini. Misalkan Anda menginginkan array nilai.
sumber