कोणीय 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);

जहाँ data_item वह आइटम है जिसे हटा दिया जाना चाहिए


2
टेम्पलेट में आपको अपने सरणी को फ़िल्टर करने के लिए एक पाइप का उपयोग करना चाहिए
KaFu

1
निष्कासन कंसोल.लॉग (this.totalArrayData)}। यह काम कर रहा है। Thanx
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 कर सकते हैं?
रेवलेका

@rhavelka स्प्लिट एंगुलर वर्जन द्वारा डिपेंड करें: यदि आपका स्प्लिट अशक्त होने के बजाय दुर्घटनाग्रस्त हो जाता है, तो इस कोड को सुरक्षित रूप से स्प्लिट स्पाइस से बचने के लिए होना चाहिए ..
एलेसेंड्रो

ठीक है, मैं यह नहीं कह रहा हूं कि आपका तर्क त्रुटिपूर्ण है, बस इसे आसानी से अनुकूलित किया जा सकता है। आप एक कर रहे हैं 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
pop () आपके द्वारा चुने गए अंतिम तत्व को नहीं हटाता है
rostamiani
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.