কৌণিক 2 এ সঞ্চিত অ্যারে থেকে আইটেমটি সরিয়ে ফেলুন


119

আমি টাইপ স্ক্রিপ্ট সহ কৌনিক 2 তে একটি সঞ্চিত অ্যারে থেকে একটি আইটেম সরাতে চাই। আমি ডেটা সার্ভিস, ডেটা সার্ভিস কোড নামে একটি পরিষেবা ব্যবহার করছি :

export class DataService {

    private data: string[] = [];

    addData(msg: string) {
        this.data.push(msg);
    }

    getData() {
        return this.data;
    }

    deleteMsg(msg: string) {
        delete [this.data.indexOf(msg)];
    }
}

এবং আমার উপাদান শ্রেণি:

import {Component} from '@angular/core'
import {LogService} from './log.service'
import {DataService} from './data.service'

@Component({
    selector: 'tests',
    template:
            `
        <div class="container">
            <h2>Testing Component</h2>
            <div class="row">
                <input type="text" placeholder="log meassage" #logo>
                <button class="btn btn-md btn-primary" (click)="logM(logo.value)">log</button>
                <button class="btn btn-md btn-success" (click)="store(logo.value)">store</button>
                <button class="btn btn-md btn-danger" (click)="send()">send</button>
                <button class="btn btn-md " (click)="show()">Show Storage</button>
                <button (click)="logarray()">log array</button>
            </div>
            <div class="col-xs-12">
                <ul class="list-group">
                    <li *ngFor="let item of items" class="list-group-item" #ival>
                        {{item}}
                        <button class="pull-right btn btn-sm btn-warning" (click)="deleteItem(ival.value)">Delete
                        </button>
                    </li>
                </ul>
            </div>
            <h3>{{value}}</h3>
            <br>
        </div>
    `
})

export class TestsComponent {

    items: string[] = [];

    constructor(
        private logService: LogService,
        private dataService: DataService) {

    }

    logM(message: string) {
        this.logService.WriteToLog(message);
    }

    store(message: string) {
        this.dataService.addData(message);
    }

    send(message: string) {
    }

    show() {
        this.items = this.dataService.getData();
    }

    deleteItem(message: string) {
        this.dataService.deleteMsg(message);
    }

    logarray() {
        this.logService.WriteToLog(this.items.toString());
    }
}

এখন, আমি যখন কোনও আইটেম মুছতে চেষ্টা করি তা বাদ দিয়ে সবকিছুই ঠিকঠাক কাজ করছে। লগটি আমাকে দেখায় যে আইটেমটি এখনও অ্যারেতে রয়েছে এবং তাই এখনও পৃষ্ঠায় প্রদর্শিত হয়। আমি কীভাবে আইটেমটি মুছুন বোতামটি নির্বাচন করে তা সরিয়ে ফেলতে পারি ??

উত্তর:


229

আপনি deleteঅ্যারে থেকে কোনও আইটেম সরানোর জন্য ব্যবহার করতে পারবেন না । এটি কেবল কোনও বস্তু থেকে কোনও সম্পত্তি অপসারণ করতে ব্যবহৃত হয়।

একটি অ্যারের থেকে উপাদান সরানোর জন্য আপনার স্প্লাইস ব্যবহার করা উচিত :

deleteMsg(msg:string) {
    const index: number = this.data.indexOf(msg);
    if (index !== -1) {
        this.data.splice(index, 1);
    }        
}

17
দ্রষ্টব্য: যদি আপনি এর indexOf()জন্য ফেরত পরীক্ষা করেন না, এটি পাওয়া না -1গেলে msgএটি অ্যারে থেকে শেষ আইটেমটি সরিয়ে ফেলবে !
মার্টিন স্নাইডার

130

আমার মনে হয় এটি করার কৌণিক 2 উপায় হ'ল ফিল্টার পদ্ধতি:

this.data = this.data.filter(item => item !== data_item);

যেখানে ডেটা_াইটেম এমন আইটেম যা মুছতে হবে


2
টেমপ্লেটে আপনার অ্যারে ফিল্টার করার জন্য একটি পাইপ ব্যবহার করা উচিত
কাফু 21:

1
সরানআরআইটেম (অবজেক্টটিম) {this.totalArrayData = this.totalArrayData.filter (আইটেম => আইটেম.আইডি! == অবজেক্টেমেড); কনসোল.লগ (এটি.টোটালআরাইডাটা)}। ইহা কাজ করছে. থ্যাঙ্কস
gnganpath

এই আমার জন্য কাজ করেন, কোনো কারণে যেমন splice()সবকিছু মুছে ফেলার ছিল ব্যতীত মান আমি অ্যারে থেকে সরাতে চেয়েছিলেন
ইভন Aburrow

@ কেএফু - আপনি কীভাবে টেমপ্লেট অংশটি দেখাতে পারেন, আপনি কীভাবে পাইপ ব্যবহার করছেন
স্নেহা মহালঙ্ক

35

deleteঅ্যারে থেকে কোনও আইটেম সরানোর জন্য ব্যবহার করবেন না এবং splice()পরিবর্তে ব্যবহার করুন।

this.data.splice(this.data.indexOf(msg), 1);

একটি অনুরূপ প্রশ্ন দেখুন: আমি কীভাবে জাভাস্ক্রিপ্টের একটি অ্যারে থেকে একটি নির্দিষ্ট উপাদান সরিয়ে ফেলব?

দ্রষ্টব্য, যে টাইপস্ক্রিপ্টটি ES6 এর সুপারস্টেট (অ্যারে টাইপস্ক্রিপ্ট এবং জাভাস্ক্রিপ্ট উভয় ক্ষেত্রেই একই) তাই টাইপস্ক্রিপ্টের সাথে কাজ করার পরেও জাভাস্ক্রিপ্ট সমাধানগুলি সন্ধান করতে নির্দ্বিধায় অনুভব করুন।


3
দ্রষ্টব্য: যদি আপনি এর indexOf()জন্য ফেরত পরীক্ষা করেন না, এটি পাওয়া না -1গেলে msgএটি অ্যারে থেকে শেষ আইটেমটি সরিয়ে ফেলবে !
ভিন

9

এটি নিম্নলিখিত হিসাবে অর্জন করা যেতে পারে:

this.itemArr = this.itemArr.filter( h => h.id !== ID);




4

কখনও কখনও, স্প্লাইস যথেষ্ট নয় বিশেষত যদি আপনার অ্যারে ফিল্টার যুক্তিতে জড়িত থাকে। সুতরাং, প্রথমে আপনি পরীক্ষা করতে পারেন যে আপনার উপাদানটি সেই সঠিক উপাদানটি সরিয়ে দেওয়ার জন্য নিখুঁতভাবে নিশ্চিত কিনা:

if (array.find(x => x == element)) {
   array.splice(array.findIndex(x => x == element), 1);
}

আপনি যখন 2 টি করছেন ঠিক তখনই 1 টি করতে পারছেন তাই এটি কি অদক্ষ নয়?
রাহভেলকা

নিরাপদে unuseful সংযুক্ত করান এড়াতে যদি পরিবর্তে নাল পাবার আপনার সংযুক্ত করান ক্র্যাশ, এই কোড হওয়া উচিত ..: সংযুক্ত করান কৌণিক সংস্করণ দ্বারা নির্ভর @rhavelka
আলেসান্দ্রো Ornano

ঠিক আছে, আমি বলছি না যে আপনার যুক্তি ত্রুটিযুক্ত, কেবল এটি সহজেই অনুকূলিত হতে পারে। আপনি একটি করছেন find, তারপরে findIndex, এটি দুটি অনুসন্ধান যখন আপনি কোনও করতে পারেন (গ্রহণযোগ্য উত্তরের মতো)।
রাভেলকা

1

ব্যবহার splice()অ্যারে থেকে আইটেমটি সরিয়ে ফেলতে করুন এর ফলে অ্যারে সূচিটি রিফ্রেশ করুন।

delete অ্যারে থেকে আইটেমটি সরিয়ে ফেলবে তবে এটি অ্যারে সূচিটি রিফ্রেশ করবে না যার অর্থ আপনি যদি চারটি অ্যারে আইটেম থেকে তৃতীয় আইটেমটি সরাতে চান তবে উপাদানগুলির সূচক 0,1,4 উপাদানটি মুছার পরে হবে

this.data.splice(this.data.indexOf(msg), 1)



-2

আমার জন্য কাজ

 this.array.pop(index);

 for example index = 3 

 this.array.pop(3);

6
পপ () আপনি যে উপাদানটি নির্বাচন করেছেন তা নয়, শেষ উপাদানটি সরিয়ে
ফেলেছে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.