मुझे नौकरियों के शेड्यूल और व्यक्तिगत उपलब्धता के आधार पर नौकरियों को फ़िल्टर करना है।

const jobs: JobRecord[] = [
  {
    "storeName": "Highwire Coffee Company",
    "schedule":  [
      "Tuesday",
      "Thursday",
    ],
        ...
  },
  {
    "storeName": "Blue Bottle Coffee",
    "rid": "recNgeUMcYhWUxw8b",
    "schedule":  [
      "Thursday",
    ],
    ...
  },
] 

const availability: Availability = {
  "friday": false,
  "monday": false,
  "thursday": true,
  "tuesday": false,
  "wednesday": true,
}

उदाहरण के लिए, ऊपर दिए गए इन इनपुटों को देखते हुए, मुझे स्टोरनाम "ब्लू बॉटल कॉफी" के साथ केवल नौकरी लौटाने वाला एक फ़ंक्शन बनाना चाहिए।

इसके लिए, मैंने इन दो कार्यों को लिखा है, लेकिन जाहिर है, मेरा फ़ंक्शन findAvailableDays एक अप्रत्याशित टोकन त्रुटि देता है।

  filterJobs = (jobs: JobRecord[], availability: Availability): void => {
    // Step 0: Clone the jobs input
    const newJobs: JobRecord[] = cloneDeep(jobs);
    console.log(newJobs, availability);

    // Step 1: Remove jobs where the schedule doesn't align with the users' availability.
    for (const[store, schedule] of Object.entries(jobs)){
      var availDays: string[];
      availDays = findAvailableDays(availability);
      let checker = (availDays, schedule) => schedule.every(v => availDays.includes(v))
      if(!checker(availDays, schedule)){
        delete newJobs[store];
      }
    }
    // Step 2: Save into state
    this.setState({ jobs: newJobs });
  };

  function findAvailableDays (availability: Availability){
    var availDays: string[];
    availDays = [];
    for  (const [day, avail] of Object.entries(availability)){
      if (avail){
        availDays.push(day);
      }
    }
    return availDays;
  };

enter image description here

मैं यहाँ क्या खो रहा/गलत कर रहा हूँ?

0
singularity 11 सितंबर 2020, 23:32

1 उत्तर

सबसे बढ़िया उत्तर

प्रश्न की टिप्पणियों के आधार पर, आपको यह त्रुटि मिल रही है क्योंकि आपने टाइपस्क्रिप्ट में फ़ंक्शन लिखने के दो तरीकों का संयोजन किया है।

फ़ंक्शन लिखने का एक तरीका function doSomething() { ... } लिखना है। आप इसे केवल एक दायरे में कर सकते हैं, एक ऐसी जगह जहां नई चीजों की घोषणा की अनुमति है। उदाहरण के लिए, किसी नई फ़ाइल में रिक्त स्थान उस मॉड्यूल का सबसे ऊपरी दायरा होता है, लेकिन हर बार जब आप कोई नया फ़ंक्शन दर्ज करते हैं या यहां तक ​​कि जब आप if जैसे नियंत्रण ब्लॉक में प्रवेश करते हैं, तब भी एक स्कोप बनाया जाता है। एक बार जब आप इस तरह के फ़ंक्शन को घोषित कर देते हैं, तो आप इसे केवल doSomething() कहकर कॉल कर सकते हैं, जब तक कि आप अभी भी उस दायरे के अंदर "देख" सकते हैं जहां फ़ंक्शन घोषित किया गया था।

दूसरा तरीका है किसी वर्ग पर विधि घोषित करना। आप ऐसा तब करते हैं जब आप doSomething() { ... } (बिना function) लिखकर कक्षा को परिभाषित कर रहे होते हैं। यदि आप कक्षा में हैं तो this.doSomething(), या bob.doSomething() का उपयोग करके इस तरह की सामान्य उदाहरण विधियों को कक्षा के एक विशिष्ट उदाहरण पर एक्सेस किया जाना चाहिए, यदि आप बॉब नामक वर्ग के एक विशिष्ट उदाहरण को संदर्भित कर रहे हैं।

इस मामले में आप findAvailableDays घोषित कर रहे हैं जैसे कि यह एक स्कोप फ़ंक्शन है लेकिन उस स्थान पर जहां कंपाइलर क्लास विधि की अपेक्षा करता है। आप इसे या तो function को हटाकर और फिर this.findAvailableDays(...) को कॉल करके, या अपने फ़ंक्शन डिक्लेरेशन को कक्षा से बाहर और फ़ाइल के शीर्ष दायरे में ले जाकर इसे आसानी से ठीक कर सकते हैं (जो आप इसमें कर सकते हैं) मामला क्योंकि यह कक्षा के अंदर से कुछ और नहीं पढ़ता है)।

0
Zack 12 सितंबर 2020, 00:14