Javascript添加/删除数组中的特定值

问题描述:

我正在寻找一种方法,根据数组中是否已存在该值来添加和删除数组中的值。我有一个订单表,其中包含一个选择框,客户名称和订单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

你尝试过这么远吗?你有什么错误吗?我们需要更多信息。 –

一个简单但并非特别有效的解决方案是,每次在添加元素之前,检查它是否已经存在于数组中。如果不是,按照预期添加它,如果是的话,什么也不做。

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