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

时间:2017-05-31 21:24:49

标签: javascript arrays

我正在寻找一种方法来添加和删除数组中的值,具体取决于该值是否已存在于所述数组中。我有一个订单表设置,其中包含一个选择框,客户名称和订单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"]

我很困惑如何处理重复的名称,并在不再选择所述名称时将其删除。任何帮助将不胜感激。

1 个答案:

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