প্রথমত, এটি প্রসারিত করা খারাপ অভ্যাস হিসাবে বিবেচিত হয়Object.prototype । পরিবর্তে, উপর ইউটিলিটি ফাংশন হিসাবে আপনার বৈশিষ্ট্য প্রদান Object, সেখানে ইতিমধ্যেই আছে ঠিক Object.keys, Object.assign, Object.is, ... ইত্যাদি।
আমি এখানে বেশ কয়েকটি সমাধান সরবরাহ করি:
- ব্যবহার
reduceএবংObject.keys
- হিসাবে (1), একত্রিত
Object.assign
- এর
mapপরিবর্তে সিনট্যাক্স ব্যবহার এবং ছড়িয়ে দিনreduce
- ব্যবহার
Object.entriesএবংObject.fromEntries
1. ব্যবহার reduceএবংObject.keys
সঙ্গে reduceএবং Object.keysআকাঙ্ক্ষিত ফিল্টার (ES6 ব্যবহার করে বাস্তবায়ন করতে তীর সিনট্যাক্স ):
Object.filter = (obj, predicate) =>
Object.keys(obj)
.filter( key => predicate(obj[key]) )
.reduce( (res, key) => (res[key] = obj[key], res), {} );
// Example use:
var scores = {
John: 2, Sarah: 3, Janet: 1
};
var filtered = Object.filter(scores, score => score > 1);
console.log(filtered);
নোট করুন যে উপরের কোডটিতেpredicate অবশ্যই অন্তর্ভুক্তির শর্ত থাকতে হবে ( ওপি ব্যবহৃত বর্জনীয় শর্তের বিপরীতে ), যাতে এটি কীভাবে Array.prototype.filterকাজ করে তার সাথে সামঞ্জস্য থাকে।
২. (1) এর সাথে মিলিয়ে Object.assign
উপরের সমাধানটিতে কমা অপারেটরটিকেreduce পরিবর্তিত resঅবজেক্টটি ফিরে আসতে অংশে ব্যবহৃত হয় । এটি অবশ্যই একটি প্রকাশের পরিবর্তে দুটি বক্তব্য হিসাবে রচনা করা যেতে পারে, তবে পরবর্তীটি আরও সংক্ষিপ্ত। কমা অপারেটর ছাড়াই এটি কাজের জন্য, আপনি ব্যবহার করতে পারে Object.assignপরিবর্তে, যা নেই ভাবে পরিবর্তিত বস্তু ফিরে
Object.filter = (obj, predicate) =>
Object.keys(obj)
.filter( key => predicate(obj[key]) )
.reduce( (res, key) => Object.assign(res, { [key]: obj[key] }), {} );
// Example use:
var scores = {
John: 2, Sarah: 3, Janet: 1
};
var filtered = Object.filter(scores, score => score > 1);
console.log(filtered);
৩. mapপরিবর্তে সিনট্যাক্স ব্যবহার করে এবং ছড়িয়ে দিনreduce
এখানে আমরা Object.assignকলটি লুপ থেকে সরিয়ে নিয়েছি, সুতরাং এটি কেবল একবার তৈরি করা হয়েছে এবং পৃথক যুক্তি হিসাবে ( স্প্রেড সিনট্যাক্স ব্যবহার করে ) স্বতন্ত্র কীগুলি এটি পাস করুন :
Object.filter = (obj, predicate) =>
Object.assign(...Object.keys(obj)
.filter( key => predicate(obj[key]) )
.map( key => ({ [key]: obj[key] }) ) );
// Example use:
var scores = {
John: 2, Sarah: 3, Janet: 1
};
var filtered = Object.filter(scores, score => score > 1);
console.log(filtered);
4. ব্যবহার Object.entriesএবংObject.fromEntries
সমাধানটি বস্তুটিকে একটি মধ্যবর্তী অ্যারে অনুবাদ করে এবং তারপরে এটি একটি সরল বস্তুতে রূপান্তরিত করে, Object.entries(ES2017) এবং বিপরীত (যেমন কী / মান জোড়গুলির একটি অ্যারে থেকে একটি বস্তু তৈরি করা ) এর সাথে ব্যবহার করা কার্যকর হবে Object.fromEntries( ES2019)।
এটি এই "ওয়ান-লাইনার" পদ্ধতিটিকে বাড়ে Object:
Object.filter = (obj, predicate) =>
Object.fromEntries(Object.entries(obj).filter(predicate));
// Example use:
var scores = {
John: 2, Sarah: 3, Janet: 1
};
var filtered = Object.filter(scores, ([name, score]) => score > 1);
console.log(filtered);
প্রাকটিক ফাংশনটি এখানে আর্গুমেন্ট হিসাবে একটি মূল / মান জুটি পায় যা কিছুটা আলাদা তবে প্রেডিকেট ফাংশনের যুক্তিতে আরও সম্ভাবনার অনুমতি দেয়।