Fonksiyonel sürümü kesintili azaltma, örneğin 'dönüştürme' olarak uygulanabilir. alt çizgi olarak.
Bunu durdurmak için bir yapılandırma bayrağıyla uygulamaya çalıştım, böylece uygulama azaltma şu anda kullanmakta olduğunuz veri yapısını değiştirmek zorunda kalmaz.
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
Kullanım1, basit olan
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, dahili değişken olarak config kullanın
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')
})
Kullanım3, yapılandırmayı harici değişken olarak yakala
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
Yukarıdaki kodda ne var ? Bunların aynı şeyi nasıl yapabileceğini anlamıyorum. Her durumda erken gibi kırmak yöntem vardırsome
,every
,find