কৌণিক 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;
      }
}

আমি আইডি ('personID') দিয়ে ব্যক্তি আইটেমটি পেতে চাই) আমি রুটপ্রেম থেকে যে ব্যক্তি পেয়েছি। তার জন্য আমার ফরচ লুপ দরকার? তবে আমি এর সমাধান খুঁজে পাইনি।


11
আপনি এই persons.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
আন্দ্রেই tতকেভিচ

4
@ আন্ড্রেইহাইটকেভিচকে কি ট্রিপল সমান ব্যবহার করা উচিত নয়?
এন্টনিওপ্লেসার্ড

@ আনটোনিওপ্লেসারদা, হ্যাঁ, তা করবে। তবে এই প্রশ্নের জন্য এটি খুব গুরুত্বপূর্ণ নয়।
Andrei Zhytkevich 15

1
প্রথমে কোডটি আমার কাছে রহস্যজনক বলে মনে হয় তবে এটি "সন্ধান (x => x.id == this.PressId" "" অনুসন্ধান এক্স, যেখানে x এর আইডি এই ব্যক্তির আইডির সমান "পড়তে সহায়তা করতে পারে" আমি অন্যান্য সম্পর্কে জানি না লোকেরা, তবে আমার পক্ষে এটি মনে রাখা আরও সহজ
রিজকি হাদিয়াতুররাসায়িত

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

হ্যালো @ রে_কোডার, আমি মনে করি অ্যারের উপাদান আইটেমগুলি প্রয়োগ করার আগে অ্যারে শূন্য না হলে আমাদের একটি চেক নেওয়া উচিত। লাইক: টেস্টআরে = []; টেস্টআরআইটেম = টেস্টআরে.লেন্থ> 0? testArray.find (x => x.Id == 1)। নাম: 'testArray নাল'; console.log (testArrayItem);
হাই দিনহ

1
হাই @ হাই-দিনহ, এটি সমস্যার সমাধান করেছে orted ধন্যবাদ।
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

টাইপস্ক্রিপ্ট থেকে আপনি নেটিভ জেএস অ্যারে ফিল্টার () পদ্ধতিটি ব্যবহার করতে পারেন:

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

এটি মূল অ্যারে থেকে কেবল মিলের উপাদানগুলির সাথে একটি অ্যারে প্রদান করে (0, 1 বা আরও)

তথ্যসূত্র: https://developer.mozilla.org/it/docs/Web/JavaScript/ উল্লেখ / গ্লোবাল_অবজেক্টস / অ্যারে / ফিল্টার


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 );
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.