javascript - एक मूल्य के आधार पर वस्तुओं की एक सरणी से एक संपत्ति का चयन करें: जावास्क्रिप्ट




arrays object (8)

आप एक ही समय में अनिवार्य रूप से map और filter करने के लिए .reduce का उपयोग कर सकते हैं। नीचे मैंने [v].slice(+!c) का उपयोग करके एक संचित सरणी का निर्माण किया है, जो [v].slice(+!c) (सत्य) सरणी में मान जोड़ देगा यदि c सत्य है, तो, यह इसे सरणी में नहीं जोड़ेगा (जैसा कि [v].slice(+!false) वापस आएगा [] , और [...[]] दे देंगे [] :

const arr = [{
 "value": "abc",
 "checked": true
}, {
 "value": "xyz",
 "checked": false
}, {
 "value": "lmn",
 "checked": true
}];

const res = arr.reduce((a, {value:v, checked:c}) => [...a, ...[v].slice(+!c)], []);
console.log(res);

मेरे पास निम्न संरचना के साथ वस्तुओं की एक सरणी है:

var arr = [
  {
    "value": "abc",
    "checked": true
  },
  {
    "value": "xyz",
    "checked": false
  },
  {
    "value": "lmn",
    "checked": true
  }
];

let result = arr.filter(item => item.checked);

console.log(result);

मैं चाहता हूं कि आउटपुट हो:

["abc", "lmn"] 

क्योंकि उन दो value s की checked: true

मैंने जाँच मूल्य के आधार पर फ़िल्टरिंग की कोशिश की है:

let result = arr.filter(item => item.checked);

मुझे उन वस्तुओं को मिल रहा है जिन्होंने संपत्ति मूल्य की checked है जो सही पर सेट true

मदद की सराहना की जाएगी।


आप चेक का उपयोग reduce कर सकते हैं यदि checked सही है, तो संचयकर्ता को मान push करें - 2 छोरों की कोई आवश्यकता नहीं है:

const arr = [{"value": "abc","checked": true},{"value": "xyz","checked": false},{"value": "lmn","checked": true}],
  filtered = arr.reduce((a, o) => o.checked ? a.concat(o.value) : a, [])
  
console.log(filtered)

जैसा कि assoron द्वारा बताया गया है, push assoron तुलना में तेज़ है, इसलिए आप उस फ़ंक्शन को निम्नलिखित के रूप में लिख सकते हैं:

const arr = [{"value": "abc","checked": true},{"value": "xyz","checked": false},{"value": "lmn","checked": true}],
  filtered = arr.reduce((a, o) => {
    if (o.checked) a.push(o.value)
    return a
  }, [])
  
console.log(filtered)


एक जेनेरिक फ़ंक्शन बनाएं जिसमें आपको केवल मुख्य मान और सरणी को पास करने की आवश्यकता होती है और यह मापदंडों के मूल पर एरिरी को फ़िल्टर करेगा

 var arr = [
          {
            "value": "abc",
            "checked": true
          },
          {
            "value": "xyz",
            "checked": false
          },
          {
            "value": "lmn",
            "checked": true
          }
        ]


            function filterList(keyValue, list) {
                let filteredList = [];
                for(let i = 0; i < list.length; i++) {
                    if(list[i]["checked"] === keyValue) {
                        filteredList.push(list[i]["value"]);
                    }
                }
                return filteredList;
            }

    console.log(filterList(true, arr));

चीजों को जटिल मत बनाओ। बस लूप के लिए एक मैदान का उपयोग करें और रनटाइम को बचाएं। निम्नलिखित सरणी को केवल एक बार पुन: प्रसारित करेगा, भले ही आपके पास आपके सरणी के सभी तत्व एक जाँच की गई संपत्ति true

var arr = [{
 "value": "abc",
 "checked": true
}, {
 "value": "xyz",
 "checked": false
}, {
 "value": "lmn",
 "checked": true
}];

var results = [];
for(var i=0; i<arr.length-1; i++) {
  if(arr[i].checked === true){
    results.push(arr[i].value)
  }
}

यदि आप .filter / .filter इस आंतरिक कार्यान्वयन को .filter वे थोड़ी देर लूप का उपयोग करके सरणी को पुनरावृत्त करेंगे। मान लीजिए कि आपके पास एक डेटा है जिसमें सभी तत्वों की जाँच की गई है, तो फ़िल्टर सभी तत्वों पर एक बार फिर से जमा हो जाएगा और फिर से उस पर से मान प्राप्त करने के लिए उन पर मैप करेगा।


नीचे दिए गए मानचित्र और फ़िल्टर फ़ंक्शन का उपयोग करना:

var arr = [ {
  "value": "abc",
  "checked": true
},
{
  "value": "xyz",
  "checked": false
},
{
  "value": "lmn",
  "checked": true
}]


let checkedValues = arr.map((item) => item.checked ? item.value : null).filter(item => item);

console.log(checkedValues);


फ़िल्टर और मानचित्र का उपयोग करें:

const arr =[{"value":"abc","checked":true},{"value":"xyz","checked":false},{"value":"lmn","checked":true}];

 const result = arr.filter(res=>res.checked).map(ele=>ele.value);
 
 console.log(result);


सबसे पहले, यह मान्य जेएस नहीं है - आपको अपने ब्रैकेट और ब्रेस स्वैप करने की आवश्यकता है। Arrays उपयोग करता है [] , और ऑब्जेक्ट {} उपयोग करते हैं, न कि दूसरे तरीके से।

दूसरे, आपको पहले checked की checked संपत्ति के आधार पर वांछित वस्तुओं को filter करना चाहिए, फिर इच्छित गुणों को निकालने के लिए map का उपयोग map :

const arr =[{"value":"abc","checked":true},{"value":"xyz","checked":false},{"value":"lmn","checked":true}];

const res = arr.filter(({ checked }) => checked).map(({ value }) => value);

console.log(res);


Array.prototype.reduce() आपकी मदद कर सकता है। reduce() कॉलबैक में दो तर्क होते हैं, पहला तर्क पुराने / पिछले पुनरावृत्ति मूल्य और दूसरा तर्क वर्तमान पुनरावृत्ति मूल्य या तत्व है।

इसलिए इस फ़ंक्शन का उपयोग करके हम अपने वर्तमान पुनरावृत्ति मानों को पिछले पुनरावृत्ति मान (कुल मान) में रख सकते हैं।

reduce() विधि एरे के प्रत्येक तत्व पर एक रिड्यूसर फ़ंक्शन (जो आप प्रदान करते हैं) निष्पादित करता है, जिसके परिणामस्वरूप एक आउटपुट आउटपुट होता है।

var arr = [{"value": "abc","checked": true},{"value": "xyz","checked": false},{"value": "lmn","checked": true}]

const result = arr.reduce((acc, cur) => ((cur.checked && acc.push(cur.value)), acc), [])
console.log(result)








ecmascript-6