यहां बहुत सारे उत्तर उपयोग किए जाते हैं Array.prototype.reduce एक उत्परिवर्तित संचायक का निर्माण करने के लिए करते हैं, और सही ढंग से इंगित करते हैं कि बड़े सरणियों के लिए, यह कहना अधिक कुशल है, एक प्रसार ऑपरेटर का उपयोग करके एक नया सरणी प्रत्येक पुनरावृत्ति की प्रतिलिपि बनाना। नकारात्मक पक्ष यह है कि यह लघु लैंबडा सिंटैक्स का उपयोग करके "शुद्ध" अभिव्यक्ति के रूप में सुंदर नहीं है।
लेकिन इसके आसपास एक तरीका कॉमा ऑपरेटर का उपयोग करना है। C जैसी भाषाओं में, अल्पविराम एक ऑपरेटर होता है जो हमेशा दाहिने हाथ का ऑपरेंड लौटाता है। आप इसका उपयोग एक अभिव्यक्ति बनाने के लिए कर सकते हैं जो एक शून्य फ़ंक्शन को कॉल करता है और एक मान लौटाता है।
function partition(array, predicate) {
return array.reduce((acc, item) => predicate(item)
? (acc[0].push(item), acc)
: (acc[1].push(item), acc), [[], []]);
}
यदि आप इस तथ्य का लाभ उठाते हैं कि एक बूलियन अभिव्यक्ति स्पष्ट रूप से 0 और 1 के रूप में एक संख्या में डालती है, और आप इसे और भी संक्षिप्त बना सकते हैं, हालांकि मुझे नहीं लगता कि यह पढ़ने योग्य है:
function partition(array, predicate) {
return array.reduce((acc, item) => (acc[+!predicate(item)].push(item), acc), [[], []]);
}
उपयोग:
const [trues, falses] = partition(['aardvark', 'cat', 'apple'], i => i.startsWith('a'));
console.log(trues);
console.log(falses);