我正在寻找一种方法来添加和删除数组中的值,具体取决于该值是否已存在于所述数组中。我有一个订单表设置,其中包含一个选择框,客户名称和订单ID,我希望根据客户名称构建此数组。
Order Table
-----------
Select Customer Order_ID
------------------------------
[X] Joe 1
[X] Joe 2
[] Mark 3
[] Mark 4
[X] Mark 5
我正在创建一个Customer数组,该数组会在表中推送所选的客户名称。在上面的例子中,如果数组中已存在选定的名称,则只需忽略所述名称,因此数组应显示....
//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"]
我很困惑如何处理重复的名称,并在不再选择所述名称时将其删除。任何帮助将不胜感激。
答案 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()] // []
);