javascript - एंट्री मैचिंग वैरिएबल के लिए ऑब्जेक्ट की खोज सरणी और यह जांचें कि क्या यह अन्य क्षेत्रों से मेल खाता है



arrays search (1)

आप array.filter उपयोग कर सकते हैं, यह एक ऐसा फंक्शन लेता है जो एरे के प्रत्येक आइटम को पास करता है और सही या गलत रिटर्न करता है और एक नया एरे देता है जिसमें केवल वे आइटम होते हैं जहां फिल्टर करने के लिए दिया गया फंक्शन सही वापस आएगा।

आप आंशिक रूप से एक करी फ़ंक्शन को लागू कर सकते हैं। करी समारोह का उदाहरण:

const plus = a => b => a+b;
const plusTen = plus(10);//is a function that takes number b and adds 10 (a is 10)
const eleven = plusTen(1); takes 1 for value of b and 10 for value of a

यहां बताया गया है कि आप करी फंक्शन का उपयोग किस तरह कर सकते हैं:

const equal = search => value =>
  search === value;
const isFive = equal(5);
//... this will return false, search is 5 and value is 10
//  5===10 is false
if(isFive(10)){

एक फ़ंक्शन प्रदान करें जो किसी ऑब्जेक्ट से एक संपत्ति प्राप्त करेगा:

const getA = o => (o&&o.a);
getA({a:10};//will return 10
getA({hasNoA:10};//will return undefined

फ़िल्टर फ़ंक्शन बनाने के लिए सभी को मिलाएं:

const data = [
  {a:3,b:2},
  {a:4,b:6},
  {a:5,b:8},
  {a:6,b:9},
  {a:7,b:3}
];

//filer function needs a getter (like getA)
// comparer that is a partially applied function that takes a value and compares it
//   with o.something (if getter is getA it'll compare with o.a)
// o is the object that needs to be filtered (like elements of data: data[0]={a:3,b:2})  
const filterFn = getter => comparer => o =>
  comparer(getter(o));

//get a property
const getA = o => (o&&o.a);
//you can write getB I'm sure

// compare search === value
const equal = search => value =>
  search === value;

// compare search <= value
const biggerEqual = search => value =>
  search <= value;

// all data items where item.a === 5
console.log(
  "a is 5",
  data.filter(
    filterFn(getA)(equal(5))//partially apply equal with search of 5
  )
);

//all data items where item.a >= 5
console.log(
  "a equals or bigger 5",
  data.filter(
    filterFn(getA)(biggerEqual(5))//partially apply biggerEqual with search of 5
  )
);

//if you want to compare b with some things you could do
// const getB = o => (o&&o.b);
// data
//  .filter(filterFn(getA)(biggerEqual(5)))//a bigger or equal 5
//  .filter(filterFn(getB)(can you guess?)//b equal 5

// here is an example that takes an array of data and an array of filter functions
//  it'll apply filter on array of data for every function
const filterData = (array, filterFunctions) =>
  filterFunctions.reduce(
    (result,filterFunction)=>result.filter(filterFunction),
    array
  );
// using filterData
console.log(
  "using filterData",
  filterData(data,[
    filterFn(getA)(biggerEqual(5))//partially apply biggerEqual with search of 5
    //,you could add more filters here
  ])
)

एक अधिक जटिल तुलना के लिए (जैसे कि जानना चाहते हैं कि वस्तु का मूल्य मूल्यों की सूची में है) तो आप निम्न कार्य कर सकते हैं:

const filterFn = getter => comparer => o =>
  comparer(getter(o));
const data= [{id:23},{id:11},{id:435}];
const values= [23, 435, 5];

const getId = o => o.id;
const isIn = haystack => needle => haystack.includes(needle);
const isInValues = isIn(values);
console.log(
  data.filter(filterFn(getId)(isInValues))
)

इसलिए कार्यक्रम एक कक्षा आवंटित करने का प्रयास कर रहा है। अब तक, प्रोग्राम ने उपयोगकर्ता से क्लास कोड, छात्रों की संख्या और क्या कंप्यूटर की आवश्यकता है, और फ़ील्ड "cRObj.name", "cRObj.students" और crobj.computers (तो एक के साथ बनाया गया है) के लिए कहा है कक्षा का नाम cRObj.name, cRObj.students के तहत छात्र क्षमता की संख्या और cRObj.comक्यूपर्स में कंप्यूटर (y / n) है या नहीं, के तहत सूचीबद्ध किया जाएगा।

मुझे एक प्रविष्टि खोजने का प्रयास करने के लिए वस्तुओं की सरणी को खोजने के लिए मिला है जो उपयोगकर्ता द्वारा दर्ज किए गए छात्रों की संख्या से मेल खाता है (जो मुझे लगता है कि मुझे पता है कि कैसे करना है)।

हालाँकि, इसके बाद इसे जाँचने की आवश्यकता है crobj.compoint उपयोगकर्ता के इनपुट के बराबर है और फिर पहले दो मैच होने पर cRObj.name के तहत प्रविष्टि को सहेजें, जो कि मैं कैसे करना है, इस बारे में अनिश्चित हूं।






javascript-objects