คุณสามารถเพิ่ม generic ofilter
(ใช้งานร่วมกับ generic oreduce
) เพื่อให้คุณสามารถกรองออบเจ็กต์ได้อย่างง่ายดายเช่นเดียวกับอาร์เรย์ -
const oreduce = (f, acc, o) =>
Object
.entries (o)
.reduce
( (acc, [ k, v ]) => f (acc, v, k, o)
, acc
)
const ofilter = (f, o) =>
oreduce
( (acc, v, k, o)=>
f (v, k, o)
? Object.assign (acc, {[k]: v})
: acc
, {}
, o
)
เราสามารถเห็นมันทำงานได้ที่นี่ -
const data =
{ item1: { key: 'a', value: 1 }
, item2: { key: 'b', value: 2 }
, item3: { key: 'c', value: 3 }
}
console.log
( ofilter
( (v, k) => k !== 'item2'
, data
)
, ofilter
( x => x.value === 3
, data
)
)
ตรวจสอบผลลัพธ์ในเบราว์เซอร์ของคุณเองด้านล่าง -
const oreduce = (f, acc, o) =>
Object
.entries (o)
.reduce
( (acc, [ k, v ]) => f (acc, v, k, o)
, acc
)
const ofilter = (f, o) =>
oreduce
( (acc, v, k, o)=>
f (v, k, o)
? Object.assign (acc, { [k]: v })
: acc
, {}
, o
)
const data =
{ item1: { key: 'a', value: 1 }
, item2: { key: 'b', value: 2 }
, item3: { key: 'c', value: 3 }
}
console.log
( ofilter
( (v, k) => k !== 'item2'
, data
)
, ofilter
( x => x.value === 3
, data
)
)
ฟังก์ชันทั้งสองนี้สามารถใช้งานได้หลายวิธี ฉันเลือกที่จะแนบเข้าไปArray.prototype.reduce
ข้างในoreduce
แต่คุณสามารถเขียนทั้งหมดตั้งแต่เริ่มต้นได้อย่างง่ายดาย