ফিল্টার করতে (ES6 ফ্যাট অ্যারো) কীভাবে অবজেক্টের অ্যারে ব্যবহার করবেন


139

আমি .filterপ্রাপ্তবয়স্কদের (জ্যাক এবং জিল) ফিরে আসার সাথে ES6 তীর ফাংশনটি ব্যবহার করার চেষ্টা করছি । এটি উপস্থিত হয় আমি একটি বিবৃতি ব্যবহার করতে পারবেন না।

ES6 এ করার জন্য আমার কী জানতে হবে?

var family = [{"name":"Jack",  "age": 26},
              {"name":"Jill",  "age": 22},
              {"name":"James", "age": 5 },
              {"name":"Jenny", "age": 2 }];

let adults = family.filter(person => if (person.age > 18) person); // throws error

(8:37) SyntaxError: unknown: Unexpected token (8:37)
|let adults = family.filter(person => if (person.age > 18) person);

আমার কাজের ES5 উদাহরণ:

let adults2 = family.filter(function (person) {
  if (person.age > 18) { return person; }
});

(8:37) সিনট্যাক্স এরর: অজানা: অপ্রত্যাশিত টোকেন (8:37) | আসুন वयस्कদের = পরিবার.ফিল্টার করুন (ব্যক্তি => যদি (ব্যক্তি.এজ> 18) লোক);
হেনরি ঝু

উত্তর:


236

এটি উপস্থিত হয় আমি একটি বিবৃতি ব্যবহার করতে পারবেন না।

তীর ফাংশন হয় হয় একটি অভিব্যক্তি বা তাদের ব্লক হিসাবে একটি ব্লক ব্যবহার করার অনুমতি দেয় । একটি অভিব্যক্তি পাস

foo => bar

নিম্নলিখিত ব্লকের সমতুল্য

foo => { return bar; }

যাহোক,

if (person.age > 18) person

একটি অভিব্যক্তি নয়, ifএকটি বিবৃতি। সুতরাং আপনি যদি ifএকটি তীর ফাংশন ব্যবহার করতে চান তবে আপনাকে একটি ব্লক ব্যবহার করতে হবে :

foo => {  if (person.age > 18) return person; }

প্রযুক্তিগতভাবে সমস্যাটি সমাধান করার সময় এটি একটি বিভ্রান্তিকর ব্যবহার .filter, কারণ এটি প্রস্তাব দেয় যে আউটপুট অ্যারেতে থাকা মানটি আপনাকে ফিরিয়ে দিতে হবে। যাইহোক, কলব্যাকটি পাস করা .filterএকটি বুলিয়ান ফেরত দেওয়া উচিত , trueঅথবা false, নির্দেশ করে যে উপাদানটি নতুন অ্যারেতে অন্তর্ভুক্ত করা উচিত কিনা।

সুতরাং আপনার যা দরকার তা হল

family.filter(person => person.age > 18);

ইএস 5 এ:

family.filter(function (person) {
  return person.age > 18;
});

আহ, কি দুর্দান্ত ব্যাখ্যা। । ফিল্টার () এ যদি কোনও জিনিসের জন্য কিছু না ফেরানো হয়, তবে তা কি মিথ্যা বলে ধরে নেওয়া হবে? উদাহরণস্বরূপ, আপনার ES5 উদাহরণে, কেবলমাত্র সত্য উপাদানগুলি ফিরে আসে।
হেনরি ঝু

2
@ হেনরিঝু: হ্যাঁ তবে আমার উদাহরণ সর্বদা হয় falseবা হয় true, যেহেতু person.age > 18সর্বদা হয় হয় falseবা হয় true
ফেলিক্স ক্লিং

"আন-ব্লকড" সহ সংস্করণটি যদি ফিরে আসার কথা ছিল person(অবশ্যই এটি আপনার নির্দেশ অনুসারে এটি করে না ...)। আপনার প্রথম সংশোধনটি আসলে এটি করে ( foo => { if (person.age > 18) return person }) করা থাকলে, আপনি ES5 কোডে ওপি কী ব্যবহার করেছেন তার সঠিক সমতুল্য হয়ে উঠবেন। যদিও এটি একটি বিভ্রান্তিকর কোড, এটি কাজ করে এবং সমস্যাটি সমাধান করবে। return personবাধ্য করা হবে true, এবং কোনও রিটার্ন "ফিরে" undefinedআসবে না, যা জোর করে জোর করা হবে false
অমিত

1
@ অ্যামিট: অবশ্যই আমি ভেবেছিলাম কারণ অন্য উত্তরটি এটির পরামর্শ দিয়েছে, আমার দরকার নেই। তবে এটি বিভ্রান্তিকর হতে পারে, তাই আমি এটি আপডেট করেছি।
ফেলিক্স ক্লিং

2
@ জাস্ট-বরিস: এটি এখানে কী অর্জন করবে তা নিশ্চিত নয় .filter। আপনি সাধারণভাবে তীর ফাংশন বলতে চান?
ফেলিক্স ক্লিং 21

46

আপনি স্পষ্টভাবে একটি দিয়ে ফিরে আসতে পারবেন না if, আপনার ধনুর্বন্ধনী প্রয়োজন হবে:

let adults = family.filter(person => { if (person.age > 18) return person} );

যদিও এটি সরল করা যায়:

let adults = family.filter(person => person.age > 18);

দুর্দান্ত, দ্বিতীয়টি কাজ করে। প্রথমটি একটি খালি অ্যারে প্রদান করে। কোন ধারনা?
হেনরি ঝু

1
@ হেনরিঝু: এটি ঠিক কাজ করে (সম্ভবত আপনার কোড বা ট্রান্সপোর্টারটিতে অন্য কিছু ভুল হয়েছে)। তবে এটি যাইহোক সঠিক উপায় নয়।
ফেলিক্স ক্লিং

1
আপনার অন্য বিবৃতি আছে এমন ক্ষেত্রে এটি কীভাবে হবে? আমি এটি একটি বার্ষিকী দিয়ে দেখার চেষ্টা করছি তবে সঠিক বাক্যবিন্যাস সনাক্ত করতে পারে বলে মনে হচ্ছে না
Winnemucca

@ স্টেভেক হুবহু আপনি যেমন প্রথম উদাহরণটির মতো একটি সাধারণ ক্রিয়াকলাপের সাথে পছন্দ করেন।
কিট সুন্দে

0

আপনি যতটা সহজ ব্যবহার করতে পারেন const adults = family.filter(({ age }) => age > 18 );

const family =[{"name":"Jack",  "age": 26},
              {"name":"Jill",  "age": 22},
              {"name":"James", "age": 5 },
              {"name":"Jenny", "age": 2 }];

const adults = family.filter(({ age }) => age > 18 );

console.log(adults)


0

যারা ব্যবহার করেন তাদের জন্য আমার সমাধান এখানে hook; আপনি যদি আপনার গ্রিডে আইটেম তালিকাভুক্ত করছেন এবং নির্বাচিত আইটেমটি সরাতে চান, আপনি এই সমাধানটি ব্যবহার করতে পারেন।

var list = data.filter(form => form.id !== selectedRowDataId);
setData(list);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.