कोणीय 2 टाइपस्क्रिप्ट कैसे ऐरे में तत्व को खोजने के लिए


131

मेरे पास एक घटक और एक सेवा है:

घटक:

export class WebUserProfileViewComponent {
    persons: Person [];
    personId: number;
    constructor( params: RouteParams, private personService: PersonService) {
          
        
           this.personId = params.get('id');
           this.persons =  this. personService.getPersons();
           console.log(this.personId);  
        }
}

सर्विस:

@Injectable()
export class PersonService {
      getPersons(){
        var persons: Person[] = [
            {id: 1, firstName:'Hans', lastName:'Mustermann', email: 'mustermann@test.com', company:'Test', country:'DE'},
            {id: 2, firstName:'Muster', lastName:'Mustermann', email: 'mustermann@test.com', company:'test', country:'DE'},
            {id:3, firstName:'Thomas', lastName:'Mustermann', email: 'mustermannt@tesrt.com', company:'test', country:'DE'}
        ];
          
        return persons;
      }
}

मैं आईडी ('व्यक्ति') के साथ व्यक्ति आइटम प्राप्त करना चाहता हूं। मैं व्यक्ति रौतेपराम से मिलता हूं। उसके लिए मुझे फोरच लूप की आवश्यकता है? लेकिन मुझे इसके लिए कोई हल नहीं मिला।


11
आप इस व्यक्ति की तरह Id से एक तत्व पा सकते हैं ।find (व्यक्ति => person.id === personId)
tstellfe

जवाबों:


255

आपको विधि का उपयोग करने की आवश्यकता है Array.filter:

this.persons =  this.personService.getPersons().filter(x => x.id == this.personId)[0];

या Array.find

this.persons =  this.personService.getPersons().find(x => x.id == this.personId);

2
@ श्रवणनंदन, विधि this.personService.getPersons()रिटर्नundefined
आंद्रेई झिटकेविच 13

4
@AndreiZhytkevich क्या हमें ट्रिपल बराबर का उपयोग नहीं करना चाहिए?
एंटोनियोप्लासेरडा

@antonioplacerda, हाँ, यही करेगा। हालांकि, इस सवाल के लिए यह बहुत महत्वपूर्ण नहीं है।
आंद्रेई ज़िटकेविच

1
पहले तो वह कोड मेरे लिए गूढ़ प्रतीत होता है, लेकिन यह "ढूंढना (x => x.id == this.personId" को "find x, जहां x का आईडी इस व्यक्ति आईडी के बराबर है" पढ़ने में मदद मिल सकती है, मुझे अन्य के बारे में जानकारी नहीं है लोगों, लेकिन मेरे लिए यह बहुत आसान याद करने के लिए है।
रिज़की Hadiaturrasyid

69

मान लें कि मेरे पास नीचे का सरणी है:

Skins[
    {Id: 1, Name: "oily skin"}, 
    {Id: 2, Name: "dry skin"}
];

यदि हम आइटम प्राप्त करना चाहते हैं Id = 1और Name = "oily skin", हम नीचे के रूप में कोशिश करेंगे:

var skinName = skins.find(x=>x.Id == "1").Name;

परिणाम त्वचा वापस आ जाएगी नाम "तैलीय त्वचा" है।

कृपया एक कोशिश, धन्यवाद और सबसे अच्छा संबंध है!

यहाँ छवि विवरण दर्ज करें


4
इस कोड स्निपेट के लिए धन्यवाद, जो कुछ सीमित अल्पकालिक सहायता प्रदान कर सकता है। एक उचित व्याख्या यह दर्शाती है कि समस्या का एक अच्छा समाधान क्यों है, यह दिखा कर इसके दीर्घकालिक मूल्य में बहुत सुधार होगा , और यह भविष्य के पाठकों को अन्य, समान प्रश्नों के साथ और अधिक उपयोगी बना देगा। कृपया कुछ स्पष्टीकरण जोड़ने के लिए अपने उत्तर को संपादित करें, जिसमें आपके द्वारा की गई धारणाएँ शामिल हैं।
टॉबी स्पाइट

1
आप इसे सरणी के लिए शुरू में खाली कैसे करेंगे, फिर गतिशील रूप से आबाद ... संकलन करते समय एक मुद्दा लगता है .... संपत्ति जैसे आईडी अज्ञात हो जाती है।
rey_coder

नमस्कार @rey_coder, मुझे लगता है कि हमें सरणी के तत्व आइटम प्राप्त करने के लिए कार्यान्वित करने से पहले सरणी को शून्य नहीं होना चाहिए। जैसे: testArray = []; testArrayItem = testArray.length> 0? testArray.find (x => x.Id == 1)। नाम: 'testArray null'; console.log (testArrayItem);
है दीन्ह

1
हाय @ है-दीन्ह, उस मुद्दे को हल किया। धन्यवाद।
rey_coder

9

यदि आप अक्सर इस खोज का उपयोग करते हैं, तो डेटा संरचना को मानचित्र में बदलें

mapPersons: Map<number, Person>;

// prepare the map - call once or when person array change
populateMap() : void {
    this.mapPersons = new Map();
    for (let o of this.personService.getPersons()) this.mapPersons.set(o.id, o);
}
getPerson(id: number) : Person {
    return this.mapPersons.get(id);
}

8

.findतीर के कार्यों और विनाशकारी के साथ संयोजन का उपयोग करने के लिए अभी तक उल्लेख नहीं किया गया एक साफ विकल्प है । इसका उदाहरण एमडीएन से लें

const inventory = [
  {name: 'apples', quantity: 2},
  {name: 'bananas', quantity: 0},
  {name: 'cherries', quantity: 5}
];

const result = inventory.find( ({ name }) => name === 'cherries' );

console.log(result) // { name: 'cherries', quantity: 5 }

5

टाइपस्क्रिप्ट से आप देशी JS array फ़िल्टर () विधि का उपयोग कर सकते हैं:

let filteredElements=array.filter(element => element.field == filterValue);

यह मूल सरणी (0, 1 या अधिक) से केवल मेल खाने वाले तत्वों के साथ एक सरणी देता है

संदर्भ: https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Global_Objects/Array/filter


4

अपनी सेवा में इस कोड का उपयोग करें:

return this.getReports(accessToken)
        .then(reports => reports.filter(report => report.id === id)[0]);

1

इसे इस्तेमाल करे

          let val = this.SurveysList.filter(xi => {
        if (xi.id == parseInt(this.apiId ? '0' : this.apiId))
          return xi.Description;
      })

      console.log('Description : ', val );
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.