繁体   English   中英

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

[英]Javascript Adding/Removing Specific Values from Array

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

我感到困惑如何处理重复的名称,如果不再选择该名称,则将其删除。 任何帮助将不胜感激。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM