ลดเวอร์ชันที่ใช้งานได้ด้วยการหยุดพักสามารถใช้เป็น 'transform' ได้เช่น ในขีดล่าง
ฉันพยายามใช้มันด้วยค่าสถานะการกำหนดค่าเพื่อหยุดการใช้งานเพื่อให้การลดการใช้งานไม่จำเป็นต้องเปลี่ยนโครงสร้างข้อมูลที่คุณกำลังใช้อยู่
const transform = (arr, reduce, init, config = {}) => {
const result = arr.reduce((acc, item, i, arr) => {
if (acc.found) return acc
acc.value = reduce(config, acc.value, item, i, arr)
if (config.stop) {
acc.found = true
}
return acc
}, { value: init, found: false })
return result.value
}
module.exports = transform
การใช้งาน 1 ง่าย ๆ
const a = [0, 1, 1, 3, 1]
console.log(transform(a, (config, acc, v) => {
if (v === 3) { config.stop = true }
if (v === 1) return ++acc
return acc
}, 0))
Usage2 ใช้ config เป็นตัวแปรภายใน
const pixes = Array(size).fill(0)
const pixProcessed = pixes.map((_, pixId) => {
return transform(pics, (config, _, pic) => {
if (pic[pixId] !== '2') config.stop = true
return pic[pixId]
}, '0')
})
การใช้งาน 3 จับ config เป็นตัวแปรภายนอก
const thrusts2 = permute([9, 8, 7, 6, 5]).map(signals => {
const datas = new Array(5).fill(_data())
const ps = new Array(5).fill(0)
let thrust = 0, config
do {
config = {}
thrust = transform(signals, (_config, acc, signal, i) => {
const res = intcode(
datas[i], signal,
{ once: true, i: ps[i], prev: acc }
)
if (res) {
[ps[i], acc] = res
} else {
_config.stop = true
}
return acc
}, thrust, config)
} while (!config.stop)
return thrust
}, 0)
current
ในรหัสข้างต้นหรือไม่ ฉันไม่เห็นว่าสิ่งเหล่านี้สามารถทำสิ่งเดียวกันได้อย่างไร ในกรณีใด ๆ มีวิธีการที่แตกต้นเช่นsome
,every
,find