Giảm phiên bản chức năng với ngắt có thể được thực hiện dưới dạng 'chuyển đổi', ví dụ: trong gạch dưới.
Tôi đã cố gắng triển khai nó bằng cờ cấu hình để dừng nó lại để quá trình giảm triển khai không phải thay đổi cấu trúc dữ liệu mà bạn hiện đang sử dụng.
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
Cách sử dụng 1, đơn giản
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))
Use2, sử dụng cấu hình làm biến nội bộ
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')
})
Sử dụng 3, chụp cấu hình làm biến bên ngoài
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
mã trên là gì? Tôi không biết làm thế nào những cái này có thể làm điều tương tự. Trong mọi trường hợp có những phương pháp mà phá vỡ đầu nhưsome
,every
,find