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




arrays object (10)

आप चेक का उपयोग 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
  }
];

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

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


चीजों को जटिल मत बनाओ। बस लूप के लिए एक मैदान का उपयोग करें और रनटाइम को बचाएं। निम्नलिखित सरणी को केवल एक बार पुन: प्रसारित करेगा, भले ही आपके पास आपके सरणी के सभी तत्व एक जाँच की गई संपत्ति 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 वे थोड़ी देर लूप का उपयोग करके सरणी को पुनरावृत्त करेंगे। मान लीजिए कि आपके पास एक डेटा है जिसमें सभी तत्वों की जाँच की गई है, तो फ़िल्टर सभी तत्वों पर एक बार फिर से जमा हो जाएगा और फिर से उस पर से मान प्राप्त करने के लिए उन पर मैप करेगा।


आप एक ही समय में अनिवार्य रूप से 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);


सबसे पहले, यह मान्य जेएस नहीं है - आपको अपने ब्रैकेट और ब्रेस स्वैप करने की आवश्यकता है। 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);


आप नए सरणी में मान को आगे नहीं बढ़ा रहे हैं। यह कोशिश करो कि यह ठीक से काम कर रहा है।

const arr = [{ "value": "abc", "checked": true }, { "value": "xyz", "checked": false }, { "value": "lmn", "checked": true }]
let result = []
let check = arr.filter((val) => {
    if (val.checked) {
        result.push(val.value)
    }
})
console.log(result);

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

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);


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

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);


var a = [];
arr.forEach( (i)=> i.checked ? a.push(i.value) :null  )

यह सरणी के प्रत्येक तत्व के लिए foreach में उत्तीर्ण विधि का मूल्यांकन करेगा और जाँच करेगा कि क्या तत्व। जांच सही है या नहीं, यह उस सरणी में element.value को धक्का देगा जो वांछित आउटपुट है।


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

var obj = [  
            {
                "value" : "abc",
                "checked" : true
            },
            {
                "value" : "xyz",
                "checked" : false
            },
            {
                "value" : "lmn",
                "checked" : true
            }
           ]
console.log(obj.filter(function(e){return e.checked==true}).map(function(e){return e.value}))


यहां सभी समाधान मान्य हैं, लेकिन यदि आप ES6 + सिंटैक्स के साथ अधिक पुनरावृत्त दृष्टिकोण पसंद करते हैं, तो आप अपने पाठकों के लिए अपने इरादों को सुपर-स्पष्ट करने के लिए स्पष्ट रूप से प्रत्येक आइटम पर लूप कर सकते हैं (साथ ही, यह filter और map को समाप्‍त करने से अधिक तेज़ है, वह आपकी सूची में दो बार से अधिक है):

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

const formattedListOfFilteredItems = [];
for (item of items) {
  if (item.checked)
    formattedListOfFilteredItems.push(item.value);
}

console.log(formattedListOfFilteredItems);





ecmascript-6