কৌণিক 2 এবং টাইপস্ক্রিপ্টের সাথে দুটি অবজেক্ট অ্যারে মার্জ করবেন?


92

আমি এই বিষয়ে জাভাস্ক্রিপ্ট প্রশ্নগুলি জুড়ে গিয়েছি, এই প্রশ্নটি টাইপস্ক্রিপ্টের সাথে অ্যাঙ্গুলার 2 সম্পর্কে বিশেষভাবে।

আমি যা করার চেষ্টা করছি তা হল জসন অবজেক্টগুলিকে একটি অ্যারেতে যুক্ত করা।

আমার কোডটি এরকম কিছু দেখায়,

public results: [];


public getResults(){
    this._service.get_search_results(this._slug, this._next).subscribe(
            data => {
                this.results.concat(data.results);
                this._next = data.next;
            },
            err => {
                console.log(err);
            }
        );
}

আমি কীভাবে সম্মতি জানাতে পারি data.resultsthis.results টাইপস্ক্রিপ্ট এবং কৌণিক দিয়ে সম্মতি জানাতে ?

this._slugএবং this._nextক্লাসে সেট করা আছে।

ধন্যবাদ

উত্তর:


122

আমি মনে করি আপনার পরিবর্তে নিম্নলিখিতগুলি ব্যবহার করা উচিত:

data => {
  this.results = this.results.concat(data.results);
  this._next = data.next;
},

concat ডক থেকে :

কনক্যাট () পদ্ধতিটি অ্যারে সমন্বিত একটি নতুন অ্যারে প্রদান করে যার উপর এটি অ্যারে (গুলি) এবং / অথবা মান (গুলি) যুক্ত করে আর্গুমেন্ট হিসাবে সরবরাহ করা হয়।


4
দুর্ভাগ্যক্রমে, এটি Uint8arrays নিয়ে কাজ করে না :(
ফ্রেডরিক নর্ড

যদি এই ফলাফলগুলি বাতিল বা অপরিজ্ঞাত হয় তবে ব্যর্থ হতে পারে
মাইকেল ফ্রিজিম

173

বিস্তার অপারেটর ধরণ শান্ত।

this.results = [ ...this.results, ...data.results];

স্প্রেড অপারেটর আপনাকে সহজেই একটি অ্যারের বিস্তৃত সংস্করণটিকে অন্য অ্যারেতে স্থান দিতে দেয়।

আপনি স্প্রেড অপারেটর সম্পর্কে এখানে পড়তে পারেন।


35

কৌণিক 6 স্প্রেড অপারেটর এবং কনক্যাট কাজ করে না। আপনি এটি সহজ সমাধান করতে পারেন:

result.push(...data);

পদ্ধতির মধ্যে অবজেক্টের রেফারেন্স বজায় রেখে সমাধানের সন্ধান করতে এসেছিলেন। এটি পুরোপুরি কাজ করেছে। আপনাকে ধন্যবাদ
1919

এটি অ্যারেগুলিকে মার্জ করে না, এটি দ্বিতীয় থেকে প্রথমটিতে ডেটা যুক্ত করে। এটি যখন কাজটি করতে পারে, তবে এটির মূল অ্যারেটি সংশোধন করার কারণে এটি সাবধান হওয়ার মতো বিষয়।
Davor

5

আপনি ES6 দ্বারা প্রস্তাবিত ফর্মটিও ব্যবহার করতে পারেন:

data => {
  this.results = [
    ...this.results,
    data.results,
  ];
  this._next = data.next;
},

আপনি যদি প্রথমে আপনার অ্যারে শুরু করেন তবে এটি কাজ করে public results = [];; অন্যথায় ...this.results,দ্বারা প্রতিস্থাপন ...this.results ? this.results : [],

আশাকরি এটা সাহায্য করবে



0

ধরুন আমার দুটি অ্যারে আছে প্রথমটিতে শিক্ষার্থীর বিবরণ থাকে এবং শিক্ষার্থীরা বিশদ চিহ্নিত করে। উভয় অ্যারেতে সাধারণ কী রয়েছে, এটি হল 'শিক্ষার্থীআইডি'

let studentDetails = [
  { studentId: 1, studentName: 'Sathish', gender: 'Male', age: 15 },
  { studentId: 2, studentName: 'kumar', gender: 'Male', age: 16 },
  { studentId: 3, studentName: 'Roja', gender: 'Female', age: 15 },
  {studentId: 4, studentName: 'Nayanthara', gender: 'Female', age: 16},
];

let studentMark = [
  { studentId: 1, mark1: 80, mark2: 90, mark3: 100 },
  { studentId: 2, mark1: 80, mark2: 90, mark3: 100 },
  { studentId: 3, mark1: 80, mark2: 90, mark3: 100 },
  { studentId: 4, mark1: 80, mark2: 90, mark3: 100 },
];

আমি 'শিক্ষার্থীআইডি' কী এর উপর ভিত্তি করে দুটি অ্যারে মার্জ করতে চাই want আমি দুটি অ্যারে মার্জ করার জন্য একটি ফাংশন তৈরি করেছি।

const mergeById = (array1, array2) =>
    array1.map(itm => ({
      ...array2.find((item) => (item.studentId === itm.studentId) && item),
      ...itm
    }));

চূড়ান্ত ফলাফল পেতে কোড এখানে

let result = mergeById(studentDetails, studentMark);

[
{"studentId":1,"mark1":80,"mark2":90,"mark3":100,"studentName":"Sathish","gender":"Male","age":15},{"studentId":2,"mark1":80,"mark2":90,"mark3":100,"studentName":"kumar","gender":"Male","age":16},{"studentId":3,"mark1":80,"mark2":90,"mark3":100,"studentName":"Roja","gender":"Female","age":15},{"studentId":4,"mark1":80,"mark2":90,"mark3":100,"studentName":"Nayanthara","gender":"Female","age":16}
]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.