2017-05-31 7 views
0

Ich bin auf der Suche nach einer Möglichkeit zum Hinzufügen und Entfernen von Werten aus einem Array, basierend darauf, ob der Wert bereits in besagtem Array existiert. Ich habe eine Auftragstabelle eingerichtet, die ein Auswahlfeld, einen Kundennamen und eine Auftrags-ID enthält, und ich möchte dieses Array basierend auf den Kundennamen aufbauen.Javascript Hinzufügen/Entfernen bestimmter Werte von Array

Order Table 
----------- 
Select Customer Order_ID 
------------------------------ 
[X]  Joe  1 
[X]  Joe  2 
[]   Mark  3 
[]   Mark  4 
[X]  Mark  5 

Ich erstelle ein Customer-Array, das die ausgewählten Kundennamen in die Tabelle verschiebt. Im obigen Fall, wenn ein gewählter Name bereits in einem Array existiert dann einfach ignoriert die Namen, so sollte das Array zeigen ....

//this 
customerArray["Joe", "Mark"] 

//not this 
customerArray["Joe", "Joe", "Mark"] 

Allerdings sollte es den Namen des Kunden aus dem Array nicht entfernen, bis Es gibt keine ausgewählten Datensätze, die den Kundennamen in diesem Array enthalten.

Order Table 
----------- 
Select Customer Order_ID 
------------------------------ 
[X]  Joe  1 
[]   Joe  2 
[]   Mark  3 
[]   Mark  4 
[X]  Mark  5 

Diese noch

customerArray["Joe", "Mark"] 

aber ... sein soll Dies sollte

Order Table 
----------- 
Select Customer Order_ID 
------------------------------ 
[]   Joe  1 
[]   Joe  2 
[]   Mark  3 
[]   Mark  4 
[X]  Mark  5 

customerArray["Mark"] 

Ich bin immer verwirrt, wie die doppelten Namen zu handhaben und entfernen sie, wenn die n ame ist nicht mehr ausgewählt. Jede Hilfe würde sehr geschätzt werden.

+0

Was Sie bisher versucht haben? Erhalten Sie irgendwelche Fehler? Wir brauchen mehr Informationen. –

Antwort

1

Eine einfache, aber nicht besonders effiziente Lösung besteht darin, jedes Mal, bevor Sie ein Element hinzufügen, zu prüfen, ob es bereits im Array vorhanden ist. Wenn es nicht ist, füge es wie beabsichtigt hinzu, wenn es ist, tue nichts.

const array = []; 
 

 
function add(element, arr) { 
 
    if (!arr.includes(element)) { // make sure element doesn't already exist before you add it 
 
    arr.push(element); 
 
    } 
 
} 
 

 
add("John", array); 
 
add("John", array); 
 
add("Mark", array); 
 
add("Mark", array); 
 
add("Mark", array); 
 

 
console.log(
 
    array // ["John", "Mark"] 
 
);

Die Entfernung in ähnlicher Weise durchgeführt werden müssten. Bevor Sie versuchen, zu entfernen, müssen Sie überprüfen, ob es etwas zu entfernen gibt.

const array = ["John"]; 
 

 
function remove(element, arr) { 
 
    let idx = arr.indexOf(element); 
 
    if (idx !== -1) { // make sure element exists before removing it 
 
    arr.splice(idx, 1); 
 
    } 
 
} 
 

 
remove("Mark", array); // does nothing 
 

 
console.log(
 
    array // ["John"] 
 
); 
 

 
remove("John", array); // removes John 
 

 
console.log(
 
    array // [] 
 
);

A cleaner Ansatz für diesen Anwendungsfall ist eine Datenstruktur, eindeutige Werte halten, soll zu verwenden, die eine Set ist.

const set = new Set(); 
 

 
set.add("John"); 
 
set.add("John"); 
 
set.add("Mark"); 
 
set.add("Mark"); 
 
set.add("Mark"); 
 

 
console.log(
 
    [...set.values()] // ["John", "Mark"] 
 
);

Eine Entnahme aus einem Satz ist auch recht einfach und übernimmt die Besonderheiten unter der Haube.

const set = new Set(["John"]); 
 

 
set.delete("Mark"); // does nothing 
 

 
console.log(
 
    [...set.values()] // ["John"] 
 
); 
 

 
set.delete("John"); // removes "John" 
 

 
console.log(
 
    [...set.values()] // [] 
 
);

Verwandte Themen