ब्रेक के साथ कार्यात्मक संस्करण को कम करके 'परिवर्तन', पूर्व के रूप में लागू किया जा सकता है। अंडरस्कोर में।
मैंने इसे रोकने के लिए इसे एक कॉन्फिगरेशन फ्लैग के साथ लागू करने की कोशिश की ताकि कार्यान्वयन कम करने के लिए उस डेटा संरचना को बदलना न पड़े जिसे आप वर्तमान में उपयोग कर रहे हैं।
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))
उपयोग 2, कॉन्फ़िगर का उपयोग आंतरिक चर के रूप में करें
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, बाहरी चर के रूप में कॉन्फिगर कैप्चर करें
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