Saya mencoba menggunakan fungsi panah ES6 dengan .filter
untuk mengembalikan orang dewasa (Jack & Jill). Tampaknya saya tidak dapat menggunakan pernyataan if.
Apa yang perlu saya ketahui untuk melakukan ini di ES6?
var family = [{"name":"Jack", "age": 26},
{"name":"Jill", "age": 22},
{"name":"James", "age": 5 },
{"name":"Jenny", "age": 2 }];
let adults = family.filter(person => if (person.age > 18) person); // throws error
(8:37) SyntaxError: unknown: Unexpected token (8:37)
|let adults = family.filter(person => if (person.age > 18) person);
Contoh ES5 saya yang berfungsi:
let adults2 = family.filter(function (person) {
if (person.age > 18) { return person; }
});
javascript
ecmascript-6
higher-order-functions
Henry Zhu
sumber
sumber
Jawaban:
Panah fungsi baik memungkinkan untuk menggunakan ekspresi atau suatu blok sebagai tubuh mereka. Melewati ekspresi
setara dengan blok berikut
foo => { return bar; }
Namun,
if (person.age > 18) person
bukanlah ekspresi,
if
adalah pernyataan. Oleh karena itu, Anda harus menggunakan blok, jika Anda ingin menggunakanif
fungsi panah:foo => { if (person.age > 18) return person; }
Sementara itu secara teknis memecahkan masalah, ini adalah penggunaan yang membingungkan
.filter
, karena ini menunjukkan bahwa Anda harus mengembalikan nilai yang harus dimuat dalam larik keluaran. Namun, callback yang diteruskan ke.filter
harus mengembalikan Boolean , yaitutrue
ataufalse
, yang menunjukkan apakah elemen harus disertakan dalam larik baru atau tidak.Jadi yang Anda butuhkan hanyalah
family.filter(person => person.age > 18);
Di ES5:
family.filter(function (person) { return person.age > 18; });
sumber
false
atautrue
, karenaperson.age > 18
selalu salah satufalse
atautrue
.person
(tentu saja tidak seperti yang Anda tunjuk ...). Seandainya koreksi pertama Anda benar-benar melakukan itu (foo => { if (person.age > 18) return person }
), Anda akan mendapatkan persamaan yang tepat dari apa yang digunakan OP dalam kode ES5. Meskipun itu adalah kode yang membingungkan, itu TIDAK berhasil, dan AKAN menyelesaikan masalah.return person
akan memaksatrue
, dan tidak ada jalan kembali yang akan "kembali"undefined
, yang akan dipaksafalse
..filter
. Apakah maksud Anda fungsi panah secara umum?Anda tidak dapat secara implisit kembali dengan
if
, Anda akan membutuhkan kawat gigi:let adults = family.filter(person => { if (person.age > 18) return person} );
Ini dapat disederhanakan:
let adults = family.filter(person => person.age > 18);
sumber
Inilah solusi saya bagi mereka yang menggunakan
hook
; Jika Anda mencantumkan item di kisi Anda dan ingin menghapus item yang dipilih, Anda dapat menggunakan solusi ini.var list = data.filter(form => form.id !== selectedRowDataId); setData(list);
sumber
Sesederhana yang bisa Anda gunakan
const adults = family.filter(({ age }) => age > 18 );
const family =[{"name":"Jack", "age": 26}, {"name":"Jill", "age": 22}, {"name":"James", "age": 5 }, {"name":"Jenny", "age": 2 }]; const adults = family.filter(({ age }) => age > 18 ); console.log(adults)
sumber