2017-05-31 59 views
0

我正在尋找一種方法,根據數組中是否已存在該值來添加和刪除數組中的值。我有一個訂單表,其中包含一個選擇框,客戶名稱和訂單ID,並且我正在根據客戶名稱構建這個數組。Javascript添加/刪除數組中的特定值

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

我創建一個客戶陣列,其推動在表中選擇的客戶名稱。在上述情況下,如果選擇的名稱在數組中已經存在,那麼就忽略說名字,所以陣列應該顯示....

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

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

但是,它不應該從陣列中刪除客戶的名字,直到在所述數組中沒有包含客戶名稱的選定記錄。

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

這應該還是有

customerArray["Joe", "Mark"] 

但是......

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

這應該是

customerArray["Mark"] 

我越來越糊塗瞭如何處理重複的名稱並且如果所述n去掉它們ame不再被選中。任何幫助將不勝感激。

+0

你嘗試過這麼遠嗎?你有什麼錯誤嗎?我們需要更多信息。 –

回答

1

一個簡單但並非特別有效的解決方案是,每次在添加元素之前,檢查它是否已經存在於數組中。如果不是,按照預期添加它,如果是的話,什麼也不做。

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"] 
 
);

去除會有類似的方式來完成。在嘗試刪除之前,您必須檢查是否有任何要刪除的內容。

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 // [] 
 
);

此用例的清潔器的方法是使用一個數據結構用於保持唯一值,這是一個Set

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"] 
 
);

從一組的移除也是相當簡單和引擎蓋下處理的細節。

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

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

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

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

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