এখানে প্রচুর উত্তর Array.prototype.reduceএকটি পরিবর্তনীয় সঞ্চালক তৈরি করতে ব্যবহার করে, এবং যথাযথভাবে উল্লেখ করতে হবে যে বড় অ্যারেগুলির জন্য, এটি বলার চেয়ে আরও দক্ষ, বলুন, প্রতিটি পুনরাবৃত্তিকে একটি নতুন অ্যারে অনুলিপি করতে একটি স্প্রেড অপারেটর ব্যবহার করে। অবক্ষয়টি হ'ল এটি সংক্ষিপ্ত ল্যাম্বদা সিনট্যাক্স ব্যবহার করে "খাঁটি" এক্সপ্রেশন হিসাবে অতটা সুন্দর নয়।
তবে এর একটি উপায় কমা অপারেটরটি ব্যবহার করা। সি-জাতীয় ভাষায়, কমা হ'ল একটি অপারেটর যা সর্বদা ডান হাতের অপারেন্ডকে ফেরত দেয়। আপনি এটি ব্যবহার করতে পারেন এমন অভিব্যক্তি তৈরি করতে যা শূন্য ফাংশনটিকে কল করে এবং একটি মান দেয়।
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);